2017-03-20 4 views
0

私はこのスクリプトを一般的に問題なく動作させています。それはCNN.com、allrecipes.com、reddit.comなどからページを取得している間ので、私は、一般的に言って - 私は、少なくとも1つのURL(foxnews.com)に向けて、それをポイントすると、私が代わりに403エラーを取得します。PHP Curlで403エラーが発生しますが、同じマシンのブラウザがページをリクエストできますか?

ご覧のとおり、私のマシンのブラウザと同じユーザーエージェントを設定しました(これは、Facebookのホームページにリクエストを送信することによって必要とされ、ブラウザはサポートされていないというメッセージを返しました)。

だから、基本的に私は本当の、実際のブラウザから来るのではなく、それを403'ingとしてCURLの要求を認識し、できるだけ多くのサイトを持っているために取るために必要なものステップを不思議。

$ch = curl_init(); 
    $timeout = 5; 
    curl_setopt($ch, CURLOPT_URL, $this->url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/602.4.8 (KHTML, like Gecko) Version/10.0.3 Safari/602.4.8'); 
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 

答えて

1

フォックスニュースはUSERAGENTを渡す任意の要求から自分のウェブサイトへのアクセスをブロックしているように見えます。単にUSERAGENT文字列を除去することは私のために正常に動作します:

$ch = curl_init(); 
$timeout = 5; 
curl_setopt($ch, CURLOPT_URL, $this->url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 

ホープ、このことができます! :)

+0

ありがとう!私は今、私はクッキーを設定しています、そのような問題は、住んでいると私は:) –

+0

まだ取得奇妙な問題を推測学ぶ...フォックスは動作しますが、NYTimesのはクッキーを必要と起こさない本当のブラウザの文字列にUSERAGENTを設定考え出しました。私はユーザーエージェント(ブラウザのような)を使ってキツネに戻り、クッキーを受け入れることになると考えましたが、それは解決しません。 CURLを実際のライブブラウザのように表示する方法については本当に興味があります。 メタタグは、ユーザエージェントなしであまり一貫性があるように見えるが、私はちょうど推測、事実上それに話すことができません。 –

関連する問題