ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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コマンド
- chmod 権限の変更
- ip IPアドレスの確認
- chown コマンド(所有者の変更)
- chgrp ファイル/ディレクトリのグループ情報の変更
- nohupと'&' プログラムのバックグラウンド実行(ssh接続時)
- lsof 開いているポート番号の確認
- tar ファイルの圧縮と解凍
- file ファイルの種類を表示
- cat ファイルの中身を表示
- head ファイルの先頭部分を表示
- wc 行数/単語数/文字数を確認
- shutdown システムのシャットダウンと再起動
- ps プロセスの確認
- which コマンドの絶対パスを調べる
- yum RedHat系ディストリビューションの管理
- mount ファイルシステムのマウント
- 特定フォルダ以下の特定拡張子のファイルを再帰的に削除する方法
- 特定のフォルダとそのサブフォルダ内にある特定のファイル名のファイルを再帰的に削除
- sed テキスト処理用ストリームエディタ
- awk フィールド単位の柔軟なテキスト処理
- sort 行の並び替え
- uniq 重複行の除去・カウント
- cut 行から特定列を切り出し
- tr 文字の置換・削除
- less ページャでファイルを読む
- more 古典ページャ
- xargs 標準入力をコマンド引数に変換
- paste 複数ファイルを列方向に結合
- top プロセスの動的監視
- htop 強化版インタラクティブプロセス監視
- nice プロセスの優先度を指定して起動
- renice 実行中プロセスの優先度を変更
- jobs シェル管理下のジョブ一覧
- bg ジョブをバックグラウンドで実行
- fg バックグラウンドジョブをフォアグラウンドに
- killall プロセス名でまとめて終了
- pgrep プロセス名から PID を検索
- pkill プロセス名でシグナルを送信
- uname システム情報の表示
- uptime システム稼働時間とロードアベレージ
- free メモリ使用状況の表示
- df ディスク使用量 (ファイルシステム単位)
- du ディレクトリ・ファイル単位の使用量
- lscpu CPU 情報の表示
- lsmod 読み込み済みカーネルモジュール一覧
- lspci PCI デバイス一覧
- dmesg カーネルリングバッファの表示
- w ログイン中ユーザーと負荷の表示
- ping ホストへの到達性とラウンドトリップ確認
- traceroute ホストまでの経路を表示
- netstat ネットワーク接続・ルーティング表示 (旧式)
- ss netstat 後継、ソケット統計
- ifconfig ネットワークインターフェース表示・設定 (旧式)
- dig DNS リゾルバ問い合わせの定番
- route ルーティングテーブル表示 (旧式)
- iptables Linux パケットフィルタリング
- telnet TCP 接続診断・古典的リモートログイン
- arp ARP テーブルの表示・編集 (旧式)
- useradd ユーザーアカウントの作成
- usermod 既存ユーザーアカウントの変更
- userdel ユーザーアカウントの削除
- passwd パスワードの変更・管理
- groupadd グループの追加
- id ユーザーとグループの ID・所属を表示
- whoami 現在のユーザー名を表示
- su 別ユーザーに切り替え
- dnf Red Hat 系の次世代パッケージマネージャ (yum 後継)
- pacman Arch Linux のパッケージマネージャ
- echo 文字列・変数の出力
- export 環境変数の設定と継承
- alias コマンドの別名定義
- source / . スクリプトをカレントシェルで実行
- history コマンド履歴の表示・操作
- type コマンドの種別 (組み込み/関数/エイリアス/外部) を表示
- env 環境変数表示と一時設定でコマンド実行
- set シェルオプションと位置パラメータの操作
- unset 変数・関数の削除
- printf C 風書式付き出力
- systemctl systemd ユニットの管理
- service init.d 互換のサービス管理
- journalctl systemd ジャーナルログの参照
- crontab 定期実行ジョブの登録・編集
- at 指定時刻に 1 回だけコマンド実行
- umount ファイルシステムのアンマウント
- reboot システムを再起動
- halt システムを停止
- date 日付・時刻の表示と設定
- hostname ホスト名の表示・設定
- gzip ファイルを Deflate で圧縮
- gunzip gzip 圧縮ファイルの展開
- bzip2 高圧縮率の圧縮コマンド
- xz LZMA2 ベースの高圧縮コマンド
- zstd Facebook 製の高速圧縮コマンド
- dpkg Debian パッケージの低レベル操作
- rpm Red Hat パッケージの低レベル操作
- snap Canonical の sandbox パッケージマネージャ
- apt Debian/Ubuntu の高レベルパッケージマネージャ
- 7z 7-Zip コマンドラインツール
人気ページ
- 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
コメントを削除してもよろしいでしょうか?