PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

【PHP入門】HTTPコンテキストオプションの一覧と使い方を徹底解説

はじめに

PHPでは、stream_context_create() 関数で生成したコンテキストにオプションを指定することで、https://https:// トランスポートを使った通信の挙動を細かく制御できます。本記事では、HTTPストリームラッパーで利用可能な主なコンテキストオプションを一覧表で整理し、実際のコード例とその出力結果についてもわかりやすく解説します。

主なHTTPコンテキストオプション一覧

オプション名説明
methodリモートサーバーに対して送信するHTTPメソッド(GET、POST、PUTなど)。デフォルトは GET。
headerリクエスト時に一緒に送信したい追加ヘッダーを指定します。
user_agentUser-Agent ヘッダーとして送信する値。省略時は php.ini の user_agent 設定値が使用されます。
contentヘッダーの後ろに続けて送信する追加データ。POSTやPUTリクエストでリクエストボディを送る際によく使われます。
proxyプロキシサーバーのアドレスを示すURIを指定します。
request_fulluri(boolean)TRUE にすると、リクエストの構築時に完全なURIが使用されます。デフォルトは FALSE。
follow_locationLocationヘッダーによるリダイレクトを追従するかどうか。0 で無効化、デフォルトは 1(有効)。
max_redirects追従するリダイレクトの最大回数を指定します。
protocol_version使用するHTTPプロトコルのバージョン。デフォルトは 1.0。
timeout読み取りタイムアウトの秒数。float型で指定します(例:10.5)。
ignore_errorsTRUE にすると、失敗を示すステータスコード(4xx・5xx)が返された場合でもコンテンツを取得します。デフォルトは FALSE。

使用例

次のサンプルコードは、https:// のURLからヘッダー情報と本文を取得する例です。リダイレクトを追わず(max_redirects を 0 に設定)、かつエラーレスポンスでも内容を取得できるよう(ignore_errors を 1 に設定)オプションを指定しています。

<?php
// 取得対象のURL
$url = 'https://localhost/testscript.php';

// HTTPコンテキストオプションを連想配列で定義
$opts = array('http' =>
    array(
        'method' => 'GET',
        'max_redirects' => '0',
        'ignore_errors' => '1'
    )
);

// ストリームコンテキストを作成し、URLを開く
$context = stream_context_create($opts);
$stream = fopen($url, 'r', false, $context);

// メタデータを出力
var_dump(stream_get_meta_data($stream));
?>

出力結果

このコードを実行すると、以下のようにステータスライン(HTTP/1.1 200 OK)をはじめとするレスポンスヘッダー情報と、ストリームに関するメタデータが表示されます。

array(10) {
    ["timed_out"]=>
    bool(false)
    ["blocked"]=>
    bool(true)
    ["eof"]=>
    bool(false)
    ["wrapper_data"]=>
    array(7) {
        [0]=>
        string(15) "HTTP/1.1 200 OK"
        [1]=>
        string(35) "Date: Thu, 17 Sep 2020 07:04:47 GMT"
        [2]=>
        string(55) "Server: Apache/2.4.41 (Win64) OpenSSL/1.0.2s PHP/7.1.32"
        [3]=>
        string(24) "X-Powered-By: PHP/7.1.32"
        [4]=>
        string(17) "Content-Length: 0"
        [5]=>
        string(17) "Connection: close"
        [6]=>
        string(38) "Content-Type: text/html; charset=UTF-8"
    }
    ["wrapper_type"]=>
    string(4) "http"
    ["stream_type"]=>
    string(14) "tcp_socket/ssl"
    ["mode"]=>
    string(1) "r"
    ["unread_bytes"]=>
    int(0)
    ["seekable"]=>
    bool(false)
    ["uri"]=>
    string(31) "https://localhost/testscript.php"
}

出力結果の読み方のポイント

  • wrapper_data には「HTTP/1.1 200 OK」で始まる生のレスポンスヘッダーが順に格納されています。サーバーソフトウェアのバージョンやContent-Typeなども確認できます。
  • wrapper_typehttpstream_typetcp_socket/ssl となっていることから、HTTPストリームラッパー経由でTCPソケット接続が確立されていることが分かります。
  • timed_outeof などの項目は、ストリームがタイムアウトしたか、終端に達したかといった状態を示すフラグです。

まとめ

HTTPコンテキストオプションを活用すれば、外部APIへのリクエスト時にUser-Agentを指定したり、タイムアウトを制御したり、プロキシ経由でのアクセスやリダイレクト回数の制限なども、cURL拡張モジュールに頼らず標準関数だけで実現できます。fopen()file_get_contents() と組み合わせることで、柔軟で堅牢なHTTP通信処理を実装できるので、ぜひ活用してみてください。

  1. PHPのstrtok()関数とは?文字列をトークン単位で分割する方法

    PHPのstrtok()関数は、文字列をトークン(区切られた部分文字列)に分割するための関数です。指定した区切り文字に基づいて文字列を順番に分割し、トークンを1つずつ取得することができます。 構文 strtok(str, split) パラメータ str − 分割対象となる文字列を指定します。 split − 区切り文字として使用する1つ以上の文字を指定します。複数の文字を指定した場合、そのいずれかが区切り文字として扱われます。 戻り値 strtok()関数は、分割された文字列トークンを返します。これ以上トークンが存在しない場合は false を返します。 ポイント 最初の呼び出しでは元の

  2. PHPのstrstr()関数とは?使い方と実例をわかりやすく解説

    PHPのstrstr()関数は、指定した検索文字列が対象の文字列内で最初に現れる位置を見つけ、その位置以降の文字列を返すために使用される組み込み関数です。 注意: strstr()関数は大文字と小文字を区別します。大文字・小文字を区別せずに検索したい場合は、stristr()関数を使用してください。 構文 strstr(str, search, before) パラメータ str − 検索対象となる元の文字列を指定します。 search − 検索する文字列を指定します。 before − 省略可能なブール値で、デフォルト値は「false」です。「true」に設定すると、searchパラメ