ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
基本: GET リクエスト
<?php
$ch = curl_init('https://api.example.com/users/1');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 結果を文字列で返す(必須)
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 3xx リダイレクトを追う
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);
if ($body === false) {
throw new RuntimeException("cURL error: $error");
}
if ($status >= 400) {
throw new RuntimeException("HTTP $status: $body");
}
$data = json_decode($body, true);
print_r($data);
POST 送信(フォーム形式)
<?php
$ch = curl_init('https://api.example.com/login');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
'email' => 'foo@example.com',
'password' => 'secret',
]));
// http_build_query は application/x-www-form-urlencoded 形式の文字列を作る
// 自動で Content-Type: application/x-www-form-urlencoded が付く
$body = curl_exec($ch);
curl_close($ch);
POST 送信(JSON)
<?php
$payload = ['name' => 'Taro', 'age' => 30];
$ch = curl_init('https://api.example.com/users');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Accept: application/json',
'Authorization: Bearer ' . $token,
],
CURLOPT_TIMEOUT => 10,
CURLOPT_CONNECTTIMEOUT => 3,
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($body === false || $status >= 400) {
throw new RuntimeException("HTTP $status");
}
$created = json_decode($body, true);
PUT / PATCH / DELETE
<?php
// PUT
$ch = curl_init('https://api.example.com/users/1');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_POSTFIELDS => json_encode(['name' => 'Updated']),
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
]);
// PATCH も同様
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
// DELETE
$ch = curl_init('https://api.example.com/users/1');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'DELETE',
]);
$body = curl_exec($ch);
curl_close($ch);
主要な CURLOPT 一覧
| 定数 | 意味 |
|---|---|
CURLOPT_URL | リクエスト URL |
CURLOPT_RETURNTRANSFER | true で結果を返り値に(false は echo) |
CURLOPT_POST | true で POST |
CURLOPT_POSTFIELDS | POST ボディ(配列 or 文字列) |
CURLOPT_CUSTOMREQUEST | PUT / PATCH / DELETE 等 |
CURLOPT_HTTPHEADER | 追加ヘッダ(配列) |
CURLOPT_FOLLOWLOCATION | 3xx リダイレクト追従 |
CURLOPT_MAXREDIRS | 追従上限 |
CURLOPT_TIMEOUT | 全体タイムアウト(秒) |
CURLOPT_CONNECTTIMEOUT | 接続タイムアウト |
CURLOPT_USERAGENT | UA 文字列 |
CURLOPT_HEADER | true で response ヘッダもボディに含む |
CURLOPT_NOBODY | true で HEAD リクエスト |
CURLOPT_SSL_VERIFYPEER | SSL 証明書検証(本番では true) |
CURLOPT_COOKIEJAR | 受信 Cookie を保存するファイル |
CURLOPT_COOKIEFILE | 送信時に読み込む Cookie ファイル |
CURLOPT_USERPWD | Basic 認証 user:pass |
認証
<?php
// Basic 認証
curl_setopt($ch, CURLOPT_USERPWD, 'user:password');
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
// Bearer Token
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . $token,
]);
// API Key(独自ヘッダ)
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'X-API-Key: abcdef123456',
]);
Cookie とセッション
<?php
$cookieFile = sys_get_temp_dir() . '/session.cookie';
// ログインしてセッション Cookie を保存
$ch = curl_init('https://example.com/login');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query(['user'=>'a','pass'=>'b']),
CURLOPT_COOKIEJAR => $cookieFile,
]);
curl_exec($ch);
curl_close($ch);
// 以降のリクエストで Cookie を送信
$ch = curl_init('https://example.com/mypage');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_COOKIEFILE => $cookieFile,
]);
$body = curl_exec($ch);
エラーハンドリング
<?php
function httpGet(string $url): array
{
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_TIMEOUT => 10,
CURLOPT_CONNECTTIMEOUT => 3,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_MAXREDIRS => 5,
CURLOPT_SSL_VERIFYPEER => true,
]);
$body = curl_exec($ch);
$errno = curl_errno($ch);
$error = curl_error($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$totalTime = curl_getinfo($ch, CURLINFO_TOTAL_TIME);
curl_close($ch);
if ($body === false) {
throw new RuntimeException("cURL($errno): $error");
}
return [
'status' => $status,
'body' => $body,
'time' => $totalTime,
];
}
Guzzle(推奨)
新規開発では生 cURL より Guzzle を強く推奨。内部で curl を使いつつ、PSR-7 / 例外ベース / Promise / ミドルウェアを提供します:
<?php
use GuzzleHttp\Client;
$client = new Client([
'base_uri' => 'https://api.example.com',
'timeout' => 10,
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer ' . $token,
],
]);
// GET
$response = $client->get('/users/1');
$data = json_decode((string) $response->getBody(), true);
// POST JSON
$response = $client->post('/users', [
'json' => ['name' => 'Taro', 'age' => 30],
]);
// POST form
$response = $client->post('/login', [
'form_params' => ['email' => 'a@b', 'password' => 'x'],
]);
// マルチパート(ファイルアップロード)
$response = $client->post('/upload', [
'multipart' => [
['name' => 'file', 'contents' => fopen('/tmp/a.jpg', 'r')],
['name' => 'tag', 'contents' => 'avatar'],
],
]);
Laravel HTTP クライアント
<?php
use Illuminate\Support\Facades\Http;
$response = Http::withToken($token)
->timeout(10)
->retry(3, 100)
->get('https://api.example.com/users/1');
if ($response->successful()) {
$data = $response->json();
}
// POST JSON
Http::post('https://api.example.com/users', ['name' => 'Taro']);
// マルチパート
Http::attach('avatar', file_get_contents('a.jpg'), 'avatar.jpg')
->post('https://api.example.com/upload');
FAQ
Q: CURLOPT_SSL_VERIFYPEER = false しか動かない
A: 証明書バンドルが古いか、自己署名証明書のサーバ。本来は CURLOPT_CAINFO でルート CA を指定するのが正解。false は中間者攻撃を許すので開発のみ。
Q: 並列で複数 URL を叩きたい
A: curl_multi_init() を使うか、Guzzle の Pool / Promise を使うのが簡単です。
Q: file_get_contents で HTTP は無理?
A: allow_url_fopen=On なら可能ですが、エラー処理が貧弱なため本格用途では curl / Guzzle を使ってください。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?