29.

GET通信

編集

file_get_contentsの引数にURLを入れればGET通信が出来る。PHPで最も簡単に外部URLを取得する方法のひとつです。

基本例

例文

$url = "http~";

$response = file_get_contents($url);

echo '<pre>' . $response . '</pre>';

クエリパラメータ付きで送る

$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.iniallow_url_fopen = On が必要
  • 失敗時の戻り値: false が返る。Warningも出るので @で抑制せず、エラーハンドリングを書く
  • セキュリティ: ユーザー入力をそのままURLに使うとSSRF(サーバーサイドリクエストフォージェリ)リスク
  • SSL検証: HTTPSを叩く場合、PHPのCA設定(openssl.cafile)が古いと失敗する
  • 本番では cURL または Guzzle 推奨

関連

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 基本事項
  2. HTMLへの埋め込み
  3. 変数
  4. 可変変数
  5. 定数
  6. データ型
  7. キャスト
  8. エスケープ文字
  9. 配列
  10. 演算子
  11. 代入の際の注意点
  12. 条件分岐
  13. 繰り返し処理
  14. クラスとインスタンス
  15. コンストラクタ
  16. 関数
  17. スーパーグローバル変数
  18. スコープ
  19. staticについて
  20. yieldについて
  21. ファイルのアップロード方法
  22. DB接続方法
  23. SQL実行方法
  24. カプセル化の具体例
  25. 継承の構文
  26. オーバーライド
  27. ポリモーフィズム(多様性)の具体例
  28. 抽象クラス・メソッドの構文と具体例
  29. GET通信
  30. try catchで全てのエラーを拾う方法