8

PHP を使用して Web ページのコンテンツをダウンロードしようとしています。コマンドを発行すると:

$f = file_get_contents("http://mobile.mybustracker.co.uk/mobile.php?searchMode=2");

サーバーがダウンしていることを報告するページを返します。しかし、同じ URL をブラウザに貼り付けると、期待どおりのページが表示されます。

誰がこれを引き起こしているのか考えていますか? file_get_contents は、ブラウザのリクエストと区別するヘッダーを送信しますか?

4

2 に答える 2

19

はい、違いがあります。ブラウザは追加のHTTP ヘッダーを大量に送信する傾向があります。両方から送信されたものは、おそらく同じ値を持っていません。

ここで、いくつかのテストを行った後、呼び出された HTTP ヘッダーを渡すAccept必要があるようです。

これは、 の 3 番目のパラメータを使用して、file_get_contents追加のコンテキスト情報を指定することで実行できます。

$opts = array('http' =>
    array(
        'method'  => 'GET',
        //'user_agent '  => "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2) Gecko/20100301 Ubuntu/9.10 (karmic) Firefox/3.6",
        'header' => array(
            'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*\/*;q=0.8
'
        ), 
    )
);
$context  = stream_context_create($opts);

$f = file_get_contents("http://mobile.mybustracker.co.uk/mobile.php?searchMode=2", false, $context);
echo $f;

これで、ページの HTML コードを取得できます。


ノート :

  • 私は最初に を渡すことをテストしましたUser-Agentが、必要ではないようです-対応する行がコメントとしてここにあるのはそのためです
  • ヘッダーに使用される値は、Acceptを試す前に Firefox でそのページをリクエストしたときに Firefox が使用したものfile_get_contentsです。
    • 他のいくつかの値は問題ないかもしれませんが、どの値が必要かを判断するためのテストは行っていません。


詳細については、以下を参照してください。

于 2010-03-30T20:35:30.747 に答える
-4

すべてのスペースを%20に置き換えます

于 2010-05-21T18:50:09.177 に答える