1

このコードを使用して HTTP 応答を取得しています。

$url = "http://example.com/";
$headers = get_headers($url);
$header = substr($headers[0], 9, 3);
echo = $header;

これはうまく機能しますが、リファラーを非表示にする必要があるため、次のようにhttp://href.li/を使用しています。

$url = "http://href.li/?http://example.com/";
$headers = get_headers($url);
$header = substr($headers[0], 9, 3);
echo = $header;

200 OK最終ページのステータスに関係なく、HTTP ステータス コードが返されます。最終ページからヘッダーを取得することはまったく可能ですか? または、まだリファラー非表示サービスを使用している間にこれを達成するための別のアプローチはありますか?

4

1 に答える 1

1

この種のリクエストでリファラーを非表示にするためにサードパーティのサービスは必要ありません。必要なものに設定できますが、get_headers関数ではできません。file_get_contentsとでそれを行うことができますstream_context_create。あなたの場合、私はそれが次のようなものになると思います:

$URL = 'http://example.com/';
$Context = stream_context_create(array(
    'http' => array(
        'method' => 'HEAD',
        'header' => 'Referer: '
    )
));
file_get_contents($URL, false, $Context);
$ResponseHeaders = $http_response_header;

$header = substr($ResponseHeaders[0], 9, 3);
echo $header;

stream_context_create指定したリクエストのオプションを使用してストリーム コンテキストを作成し、file_get_contentsそのコンテキストを使用してリクエストを実行します。その後、スクリプトは、HTTP URL への HTTP リクエストの後に入力される魔法の変数の一種であり、ローカル スコープでのみ使用できるかどうかをチェック$http_response_headerします。つまり、HTTP リクエストを作成する関数を呼び出した直後に使用できますが、別のスコープでは使用できません。後で実行される関数。の内容$http_response_headerは基本的に関数の結果と同じget_header()です。

(上記の例でも使用できGETますが、レスポンスボディが必要ない場合はHEAD、ボディなしでヘッダーを取得するだけです。ちなみに、PHPは、ボディを含む応答全体を取得get_headersするリクエストを発行し、その後破棄されます。しかし、GET受信サーバーまたはスクリプトがHEADリクエストを処理できない場合や、リクエストとは異なるアクションを実行するGET場合があります。実際に試してみて、何がうまくいくかを確認してください。)

于 2013-05-04T22:31:46.303 に答える