2011-01-26 8 views
4

私は現在、私たちの学校のサーバーにリクエストを送信して、さまざまなコースのクラスサイズに関するリアルタイム情報を得るPHPスクリプトを作成しています。私がプロキシを使用しないとき、スクリプトは完全にうまく動作し、コース番号と利用可能な座席の完全な文字列を返します。しかし、私はこれを学生向けのサービスにしたいと思っています。私はあまりにも多くのリクエストをすると私のIPはブロックされてしまうのではないかと心配しています。だから私はプロキシを通してこれをやろうとしていますが、成功はありません。リクエストにCURLOPT_HTTPPROXYTUNNELフィールドとCURLOPT_PROXYフィールドを追加すると、何も返されません。どんな種類のエラーメッセージも出ていないので、この時点でどのようにトラブルシューティングを行うのかはわかりません。誰が何が起こっているか、少なくともそれをトラブルシューティングする方法を知っていますか?試験に使用curl through proxyはコンテンツを返しません

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$proxy = explode(':', $proxy); 
curl_setopt($ch, CURLOPT_PROXY, $proxy[0]); 
curl_setopt($ch, CURLOPT_PROXYPORT, $proxy[1]); 
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); 
curl_setopt($ch, CURLOPT_COOKIEFILE, 'tempcookie.txt'); 
curl_setopt($ch, CURLOPT_COOKIEJAR, 'tempcookie.txt'); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_REFERER, $ref); 
$exec = curl_exec($ch); 

echo curl_error($ch); 
print_r(curl_getinfo($ch)); 
echo $exec; 

プロキシ:75.147.173.215:8080

+0

なぜ代わりに詐欺であることの結果をキャッシュしないように使用してみては? –

答えて

1
あなたはCURLOPT_STDERRを設定することができます

とCURLOPT_VERBOSE curl optionsは、ファイルにあなたのエラーを保存します。また、curl_error()機能を使用することもできます。 BTWでは、デフォルトでcurlはすべてのエラーをSTDERRに表示する必要があります。

さらに、一般的なチェックのために、ブラウザ構成プロパティで選択したプロキシを指定するだけで、ブラウザで特定のサービスを開き、正しい応答が返されるかどうかを確認できます。

UPDATE:

CURLOPT_HTTPPROXYTUNNELは(詳細はhereを参照)、プロキシサーバを要求するときにカールコールCONNECT HTTPメソッドを作るために使用されます。私はこのオプションを使わずにコードをテストしました。正常に動作しました。

コードは、私が使用:

$proxy = "75.147.173.215:8080"; 
$proxy = explode(':', $proxy); 
$url = "http://google.com"; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_PROXY, $proxy[0]); 
curl_setopt($ch, CURLOPT_PROXYPORT, $proxy[1]); 
curl_setopt($ch, CURLOPT_HEADER, 1); 

$exec = curl_exec($ch); 

echo curl_error($ch); 
print_r(curl_getinfo($ch)); 
echo $exec; 
+0

私は約10kのプロキシのリストを持っています...それはそれを確認することは非現実です – ZombieDragon

+0

それらのうちの1つから始めて、それがブラウザで動作していることを確認してから、あなたのスクリプトから動作させてください。その後、すべての10kのプロキシを処理しようとします。 – Kel

+0

また、一部のWebサイトは、攻撃のために頻繁に使用されるため、一部のパブリックプロキシからのアクセスをブロックします。 – Kel

2

私はカールとプロキシを使用する必要がある場合、私は次のコードを使用します。ここでは

$proxy = "127.0.0.1:8080"; // or something like that 

if($proxy !== null){ 

    // no need to specify PROXYPORT again 
    curl_setopt($ch, CURLOPT_PROXY, $proxy); 

    // to make the request go through as though proxy didn't exist 
    curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 0); 

} 
0

である私は私のプロジェクトのために使用されるよくテスト機能詳細自己説明コメント

80以外のポートがserによってブロックされていることが何度もありますコードは、ローカルホスト上ではなく、サーバー上で正常に動作しているように見えるので、ファイアウォールのver、ポート80のプロキシ

function get_page($url){ 

global $proxy; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
//curl_setopt($ch, CURLOPT_PROXY, $proxy); 
curl_setopt($ch, CURLOPT_HEADER, 0); // return headers 0 no 1 yes 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // return page 1:yes 
curl_setopt($ch, CURLOPT_TIMEOUT, 200); // http request timeout 20 seconds 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Follow redirects, need this if the url changes 
curl_setopt($ch, CURLOPT_MAXREDIRS, 2); //if http server gives redirection responce 
curl_setopt($ch, CURLOPT_USERAGENT, 
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7"); 
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt"); // cookies storage/here the changes have been made 
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt"); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // false for https 
curl_setopt($ch, CURLOPT_ENCODING, "gzip"); // the page encoding 

$data = curl_exec($ch); // execute the http request 
curl_close($ch); // close the connection 
return $data; 
} 
関連する問題