2011-07-22 10 views
2

プロキシでcURLを使用すると、サイトからしか取得できません。プロキシのないcURLとfile_get_contents()は何も返しません(cURL HTTPコード "0"、curl_error() Empty reply from server)。プロキシなしで他のサイトをうまくフェッチできます。このサイトは自分のHTTPリクエストをブロックしていますか無視していますか?

ブロックされているのとは別に、私がプロキシ経由でこのサイトにしかアクセスできない理由について他にも説明がありますか?

+2

「echo curl_error($ curl);」の出力は何ですか? – Paulpro

+0

はcurl_error()の出力で更新されました – babonk

答えて

1

私は本当にブロックされた推測しています。今すぐプロキシを使用し、正常に動作します。

3

あなたはcURLでUSER AGENTを設定しましたか? USER AGENTが設定されていないか、HTTPリクエストが疑わしいと思われる場合は、ウェブサイトによってブロックされることがあります。

はPHPでユーザーエージェントを設定するには:

curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); 
+0

いいアイデアですが、サイコロはありません – babonk

+0

私は喜んでくれました。 – wired00

3

これはあなたの職場や何かからですか?多くの企業は共有PHPインストールでfile_get_contents()を無効にしています。これはかなり危険です。

サイトにはおそらくユーザーエージェントの検出があります。あなたはカールの呼び出しでそれを偽装することができますが、私はfile_get_contents()でそれが可能であるとは思わない。サイトが使用するもう1つの方法は、クッキーが設定された後でコンテンツを表示するだけで、サイトスクレイパーはデータを見ることができません。

これを試してみてください:

function curl_scrape($url,$data,$proxy,$proxystatus) 
{ 
    $fp = fopen("cookie.txt", "w"); 
    fclose($fp); 
    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt"); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt"); 
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 40); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 

    if ($proxystatus == 'on') 
    { 
     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
     curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE); 
     curl_setopt($ch, CURLOPT_PROXY, $proxy); 
    } 

    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_HEADER, TRUE); 
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 
    curl_setopt($ch, CURLOPT_POST, TRUE); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 

    ob_start(); // prevent any output 
    return curl_exec ($ch); // execute the curl command 
    ob_end_clean(); // stop preventing output 
    curl_close ($ch); 
    unset($ch); 
} 
+0

file_get_contentsはgoogleや他のサイトで動作します – babonk

+0

既にクッキーのアイデア(クッキーについては気にしません)をテストしただけでなく、他の回答ごとにユーザーエージェントを偽造しています。 – babonk

関連する問題