ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
最小の GET リクエスト
$ch = curl_init('https://api.example.com/users/1');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 戻り値で受け取る (echo しない)
curl_setopt($ch, CURLOPT_TIMEOUT, 10); // 全体 10 秒で中断
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); // 接続段階 5 秒
$body = curl_exec($ch);
if ($body === false) {
$err = curl_error($ch);
$errno = curl_errno($ch);
error_log("cURL error ($errno): $err");
curl_close($ch);
throw new RuntimeException("通信失敗: $err");
}
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status >= 400) {
throw new RuntimeException("HTTP $status: $body");
}
$data = json_decode($body, true);
POST リクエスト(フォーム送信)
$ch = curl_init('https://api.example.com/login');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
'email' => 'taro@example.com',
'password' => 'secret',
]));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/x-www-form-urlencoded',
'Accept: application/json',
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
JSON を POST する
$payload = json_encode([
'title' => 'Hello',
'body' => 'World',
'tags' => ['php', 'curl'],
], JSON_UNESCAPED_UNICODE);
$ch = curl_init('https://api.example.com/posts');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer ' . $token,
'Accept: application/json',
],
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
主要オプション一覧
| オプション | 意味 | 推奨値 |
|---|---|---|
CURLOPT_RETURNTRANSFER | 戻り値で受け取る | true 必須 |
CURLOPT_TIMEOUT | 全体タイムアウト | 10〜30 秒 |
CURLOPT_CONNECTTIMEOUT | 接続タイムアウト | 5 秒 |
CURLOPT_FOLLOWLOCATION | 3xx リダイレクト追従 | true |
CURLOPT_MAXREDIRS | リダイレクト最大回数 | 5 |
CURLOPT_HTTPHEADER | リクエストヘッダ | 配列 |
CURLOPT_USERAGENT | UA 文字列 | サービス名 + URL |
CURLOPT_SSL_VERIFYPEER | SSL 証明書検証 | true(本番) |
CURLOPT_HEADER | レスポンスヘッダ込で取得 | 必要時 true |
CURLOPT_POST | POST モード | true |
CURLOPT_POSTFIELDS | POST 本文 | 文字列 or 配列 |
CURLOPT_CUSTOMREQUEST | PUT / DELETE 等の指定 | 'PUT' |
レスポンスヘッダを取得する
$ch = curl_init('https://example.com/');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => true, // ヘッダもボディに含めて返す
]);
$response = curl_exec($ch);
$headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$rawHeader = substr($response, 0, $headerSize);
$body = substr($response, $headerSize);
curl_close($ch);
// ヘッダを連想配列に
$headers = [];
foreach (explode("\r\n", trim($rawHeader)) as $line) {
if (strpos($line, ':') !== false) {
[$k, $v] = explode(':', $line, 2);
$headers[strtolower(trim($k))] = trim($v);
}
}
$contentType = $headers['content-type'] ?? null;
エラー処理の網羅版
function httpGet(string $url): array
{
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
CURLOPT_CONNECTTIMEOUT => 5,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_MAXREDIRS => 5,
CURLOPT_USERAGENT => 'MyApp/1.0',
]);
$body = curl_exec($ch);
if ($body === false) {
$msg = sprintf('cURL %d: %s', curl_errno($ch), curl_error($ch));
curl_close($ch);
throw new RuntimeException($msg);
}
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status >= 400) {
throw new RuntimeException("HTTP $status returned");
}
return ['status' => $status, 'body' => $body];
}
リトライロジック
function httpGetWithRetry(string $url, int $maxRetry = 3): string
{
$attempt = 0;
while (true) {
$attempt++;
try {
return httpGet($url)['body'];
} catch (RuntimeException $e) {
if ($attempt >= $maxRetry) throw $e;
usleep(min(2 ** $attempt, 8) * 1_000_000); // 指数バックオフ
}
}
}
Guzzle / Http ファサードとの比較
// === 同じことを Guzzle で ===
use GuzzleHttp\Client;
$client = new Client(['timeout' => 10]);
$res = $client->post('https://api.example.com/posts', [
'json' => ['title' => 'Hello'],
'headers' => ['Authorization' => "Bearer $token"],
]);
$body = (string) $res->getBody();
$status = $res->getStatusCode();
// === Laravel の Http ファサード ===
use Illuminate\Support\Facades\Http;
$res = Http::withToken($token)
->timeout(10)
->retry(3, 100)
->post('https://api.example.com/posts', ['title' => 'Hello']);
$res->json(); // 配列化
$res->status(); // 200
$res->successful(); // true/false
FAQ
Q: PUT / DELETE はどう送る?
A: CURLOPT_CUSTOMREQUEST => 'PUT'(または DELETE)。PUT で本文を送りたい場合は CURLOPT_POSTFIELDS も併用。
Q: HTTPS 検証エラー(cURL error 60)
A: 古い CA バンドル。CURLOPT_CAINFO に 最新の cacert.pem のパスを指定するか、PHP の curl.cainfo を設定。verify=false にしての回避は本番では絶対やらない。
Q: マルチパート(ファイル)送信
A: CURLOPT_POSTFIELDS に ['file' => new CURLFile('/path/to/x.png')] を渡す。Content-Type ヘッダは自動付与に任せる。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
- ls ファイル/ディレクトリ一覧表示
- sudo ユーザー指定
- cron/crontab ジョブの自動実行と登録方法
- wget http通信によるファイルダウンロード
- rm ファイル/ディレクトリ削除
- pwd カレントディレクトリの表示
- cd ディレクトリの移動
- ./configure
- make
- make install
- unzip ファイルの解凍
- mv ファイル/ディレクトリの移動および名称変更
- mkdir ディレクトリの作成
- touch 空ファイルの新規作成
- vi テキストディタの使用
- find ファイル/ディレクトリ検索
- grep 文字列の検索
- tail ファイルの末尾表示
- curl HTTP通信によるリクエスト
- nslookup ドメインのIP解決
- apt update パッケージリストの情報を更新
- apt upgrade パッケージの更新
- ln リンク/ショートカットの作成と削除
- rsync ファイル/ディレクトリの同期
- ssh リモートとの暗号化通信
- scp sshを利用したファイルのコピー
- unzip zip ファイルを解凍する
- cp ファイル/ディレクトリのコピー
- diffファイルの差分抽出
- fdisk ハードディスクに対する操作
- lsblk デバイスをツリー状で表示する
- kill プロセスを終了させる
- zip ファイルやディレクトリをzip形式に圧縮する
- host ドメインからIPアドレスを確認
- chmod 権限の変更
- ip IPアドレスの確認
- chown ファイル/ディレクトリ所有者の変更
- chgrp ファイル/ディレクトリのグループ情報の変更
- nohupと'&' プログラムのバックグラウンド実行(ssh接続時)
- lsof 開いているポート番号の確認
- tar ファイルの圧縮と解凍
- file ファイルの種類を表示
- cat ファイルの中身を表示
- head ファイルの先頭部分を表示
- wc 行数/単語数/文字数を確認
- shutdown システムのシャットダウンと再起動
- ps プロセスの確認
- which コマンドの絶対パスを調べる
- yum RedHat系ディストリビューションの管理
- mount ファイルシステムのマウント
- 特定フォルダ以下の特定拡張子のファイルを再帰的に削除する方法
- 特定のフォルダとそのサブフォルダ内にある特定のファイル名のファイルを再帰的に削除
人気ページ
- 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アノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?