この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:2
更新日時:2026-05-13 07:13:30
タイトル: GET通信
file_get_contentsの引数にURLを入れればGET通信が出来る。PHPで最も簡単に外部URLを取得する方法のひとつです。
基本例
| 例文 |
|
$url = "http~";
$response = file_get_contents($url);
echo ' ' . $response . ' ';
|
クエリパラメータ付きで送る
|
$params = [
'q' => 'keyword',
'limit' => 10,
];
$url = 'https://api.example.com/search?' . http_build_query($params);
$response = file_get_contents($url);
|
ヘッダ・タイムアウトを指定する場合
stream_context_create でオプションを渡せます。
|
$opts = [
'http' => [
'method' => 'GET',
'header' => "User-Agent: MyApp/1.0\r\n" .
"Authorization: Bearer xxx\r\n",
'timeout' => 5,
],
];
$ctx = stream_context_create($opts);
$response = file_get_contents($url, false, $ctx);
|
レスポンスヘッダの取得
|
$body = file_get_contents($url);
// $http_response_header にレスポンスヘッダが入る
print_r($http_response_header);
|
cURL を使う書き方(推奨)
本番ではエラーハンドリング・タイムアウト・ステータスコード取得が容易なcURLが推奨されます。
|
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 5,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer xxx'],
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status !== 200) {
throw new Exception("HTTP $status");
}
|
POSTやJSONを送りたい場合
本格的なHTTP通信は Guzzle 等のライブラリ利用が一般的です。
|
// Guzzle 例
$client = new GuzzleHttp\Client();
$res = $client->request('POST', $url, [
'json' => ['name' => 'Taro'],
'headers' => ['Authorization' => 'Bearer xxx'],
'timeout' => 5,
]);
$body = (string) $res->getBody();
|
注意点
- file_get_contents で URLが使えない場合:
php.ini の allow_url_fopen = On が必要
- 失敗時の戻り値: false が返る。Warningも出るので
@で抑制せず、エラーハンドリングを書く
- セキュリティ: ユーザー入力をそのままURLに使うとSSRF(サーバーサイドリクエストフォージェリ)リスク
- SSL検証: HTTPSを叩く場合、PHPのCA設定(
openssl.cafile)が古いと失敗する
- 本番では cURL または Guzzle 推奨
関連