1

ブラウザを介して行われたリクエストと本質的に同じURLのコンテンツを返すcURLリクエストを(シェルから直接またはPHP経由で)実行しようとしています(Cookie/ログインなどを除く)。

www.google.comに対する基本的な cURL リクエストは、文字エンコーディングの問題がある Google 検索の日本語版と思われるものを返します。

標準のユーザー エージェントの設定や場所の追跡などのオプションを使用してテストしても、ブラウザへの非常によく似た要求になると想定した結果にはなりません。ブラウザのリクエストを厳密に模倣するために使用すべきフラグのセットはありますか?

以下のコードは現在テスト用に使用されていますが、Cookie が保存されている場合でも、Google は場所が日本 (google.co.jp) であると想定しています。

$header = array(
        "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Language: en-us,en;q=0.5",
        "Connection: keep-alive",
        "Cache-Control: no-cache",
        "Content-Type: application/x-www-form-urlencoded; charset=UTF-8",
        "Pragma: no-cache",
    );
$useragent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)';

$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_URL, $request);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_COOKIEJAR, "my_cookies.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "my_cookies.txt");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$data = curl_exec($ch);
curl_close($ch);
4

1 に答える 1

2
$header = array(
        "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Language: en-us,en;q=0.5",
        "Connection: keep-alive",
        "Cache-Control: no-cache",
        "Content-Type: application/x-www-form-urlencoded; charset=UTF-8",
        "Pragma: no-cache",
    );
$useragent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)';

$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_URL, $request);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_COOKIEJAR, "my_cookies.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "my_cookies.txt");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_PROXY, 'PROXY_IP_HERE:PROXY_PORT'); // Use a proxy located in USA
$data = curl_exec($ch);
curl_close($ch);
于 2013-01-02T01:23:08.937 に答える