HTTP と HTTPS — HTTP(s) URL へのアクセス
HTTP 1.0 により HTTP GET メソッドを用いてファイル/リソースに読み込みのみの アクセスが可能です。仮想ホストにホスト名でアクセスするために、 Host: ヘッダが送信されます。 php.ini ファイルまたはストリームコンテキストによって user_agent 文字列を設定している場合、 それはリクエストの中にも含まれます。
ストリームにより、リソースの body にアクセスすることが できます。ヘッダは、$http_response_header 変数に保存されます。
(全てのリダイレクトが処理された後に)ドキュメント取得元のリソースの URL を知ることが 重要な場合、ストリームから返された一連のレスポンスヘッダを処理する必要があります。
from ディレクティブが設定されており、かつそれが コンテキストオプションとパラメータ で上書きされていない場合は、その値が From: ヘッダとなります。
バージョン | 説明 |
---|---|
4.3.7 | バグのある IIS サーバを検出し、"SSL: Fatal Protocol Error" エラーを回避するようになりました。 |
4.3.0 | https:// が追加されました。 |
4.0.5 | リダイレクトをサポートするようになりました。 |
例1 リダイレクト後の URL の検出
<?php
$url = 'http://www.example.com/redirecting_page.php';
$fp = fopen($url, 'r');
$meta_data = stream_get_meta_data($fp);
foreach($meta_data['wrapper_data'] as $response) {
/* リダイレクトされているか? */
if (substr(strtolower($response), 0, 10) == 'location: ') {
/* $url をリダイレクト先に書き換える */
$url = substr($response, 18);
}
}
?>
例2 HTTP リクエストで独自のヘッダを送信する
HTTP リクエストで独自のヘッダを送信することができます。 これは INI 設定項目 user_agent を処理する際の副作用によるものです。 user_agent に何らかの正常な文字列 (たとえばデフォルト設定の PHP/version など) を指定し、さらに続けて キャリッジリターン(\r) / ラインフィード(\n) を置いた後に任意のヘッダを記述します。 この方法は、PHP 4 以降のバージョンで動作します。
<?php
ini_set('user_agent', "PHP\r\nX-MyCustomHeader: Foo");
$fp = fopen('http://www.example.com/index.php', 'r');
?>
送信されるリクエストは次のようになります。
GET /index.php HTTP/1.0 Host: www.example.com User-Agent: PHP X-MyCustomHeader: Foo
注意: HTTPS がサポートされるのは、openssl 拡張モジュールが有効な場合のみです。
HTTP 接続は読み込みのみ可で、HTTP リソースにデータを書き込んだり ファイルをコピーしたりすることはできません。
たとえば POST および PUT リクエストを送信することも、 HTTP コンテキスト を使えば可能です。