HTTP(S) リクエストの発行

このページでは、App Engine アプリケーションから HTTP(S) リクエストを発行する方法について説明します。

App Engine は、URL 取得サービスを使用して、送信 HTTP(S) リクエストを発行します。リクエスト サイズの上限と URL 取得リクエストで送信されるヘッダーの詳細については、送信リクエストをご覧ください。

HTTP リクエストの発行

PHP 言語には、リモートから HTTP リクエストを行う関数がいくつか用意されています。これらは Google App Engine でさまざまな方法で実装され、割り当てや料金も異なります。

  • ストリーム ハンドラ: http://https:// に対するネイティブの PHP ストリーム ハンドラは、App Engine の URL 取得サービスを使用して HTTP リクエストを送信するように構成されています。file_get_contents() などの PHP 関数の多くは、ストリーム ハンドラを間接的に使用して URL 取得サービスを利用します。
  • cURL 拡張機能: cURL 拡張機能ではソケット サービスを使用します。アプリケーションの php.ini ファイルで cURL 拡張機能を有効にし、プロジェクトで課金を有効にする必要があります。
  • cURL "lite": cURL "lite" は Google が提供する cURL ライブラリで、ソケット サービスではなく URL 取得サービスを使用します。アプリケーションの php.ini ファイルで cURL "lite" を有効にする必要があります。cURL 拡張機能の次のメソッドは使用できません。
    • curl_multi_* 関数
    • 非標準プロトコルのサポート
    • 80(HTTP)と 443(HTTPS)以外のポートのサポート

cURL、cURL Lite、ストリーム ラッパーのどれを使用するかは、アプリケーションと環境設定によって異なります。わからない場合は、Guzzle HTTP ライブラリを使用してください。Guzzle は、HTTP リクエストの抽象レイヤーを提供します。これにより、アプリケーション コードを書き換えることなく、基礎となるサービスを変更できます。

ストリーム ハンドラ

標準の HTTP(S) ストリーム ハンドラは、fopen()file_get_contents() などの PHP 組み込み関数で使用されます。

$url = 'http://httpbin.org/post?query=update';
$data = ['data' => 'this', 'data2' => 'that'];
$headers = "accept: */*\r\n" .
    "Content-Type: application/x-www-form-urlencoded\r\n" .
    "Custom-Header: custom-value\r\n" .
    "Custom-Header-Two: custom-value-2\r\n";

$context = [
    'http' => [
        'method' => 'POST',
        'header' => $headers,
        'content' => http_build_query($data),
    ]
];
$context = stream_context_create($context);
$result = file_get_contents($url, false, $context);

cURL と cURL "lite"

cURL 関数を送信リクエストに使用するには、php.ini で cURL または cURL "lite" を有効にします。cURL "lite" では URL 取得サービスが使用され、cURL では Sockets API が使用されます。

$url = 'http://httpbin.org/post?query=update';
$data = ['data' => 'this', 'data2' => 'that'];
$headers = [
    'Accept: */*',
    'Content-Type: application/x-www-form-urlencoded',
    'Custom-Header: custom-value',
    'Custom-Header-Two: custom-value-2'
];

// open connection
$ch = curl_init();

// set curl options
$options = [
    CURLOPT_URL => $url,
    CURLOPT_POST => count($data),
    CURLOPT_POSTFIELDS => http_build_query($data),
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
];
curl_setopt_array($ch, $options);

// execute
$result = curl_exec($ch);

// close connection
curl_close($ch);

Guzzle

Guzzle は、デフォルトで PHP ストリーム ハンドラを使用しますが、cURL または cURL "lite" が有効になっている場合は、cURL ハンドラを自動的に使用します。

$url = 'http://httpbin.org/post?query=update';
$data = ['data' => 'this', 'data2' => 'that'];
$headers = [
    'Accept' => '*/*',
    'Content-Type' => 'application/x-www-form-urlencoded',
    'Custom-Header' => 'custom-value',
    'Custom-Header-Two' => 'custom-value',
];

$guzzle = new GuzzleHttp\Client;
$request = new GuzzleHttp\Psr7\Request('POST', $url, $headers, http_build_query($data));
$result = $guzzle->send($request);

リクエストのタイムアウトの設定

期限を変更するには、HTTP コンテキストtimeout オプションを使用します。

HTTPS リクエストの発行

前述の HTTP リクエストの発行をご覧ください。

ホスト証明書の検証を無効にする

デフォルトでは、App Engine に実装された HTTPS ラッパーがホストの証明書を検証し、証明書が一致しない場合はリクエストを拒否します。この動作を無効にするには、SSL/TLS コンテキスト オプションverify_peer の値を false に設定します。

別の App Engine アプリケーションへのリクエストの発行

別の App Engine アプリケーションにリクエストを発行する場合、App Engine アプリケーションでリクエストに X-Appengine-Inbound-Appid ヘッダーを追加して、その ID を表明する必要があります。URL 取得サービスにリダイレクトに従わないように指示した場合、App Engine によって、自動的にこのヘッダーがリクエストに追加されます。

URL 取得サービスがリダイレクトに従わないように指示するには、HTTP コンテキスト オプションfollow_location パラメータを false に設定する必要があります。

次のステップ

送信リクエスト内の URL 取得リクエストで送信されるヘッダーなど、URL 取得サービスについて学習する。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

PHP 5 の App Engine スタンダード環境