2017-04-06 7 views
1

一般に、サーバーがPHPのcURLリクエストをブロックすることは可能ですか?サーバはカール要求を具体的にブロックできますか?

私は約6〜8ヶ月間、特定の一般向けのURLに15分ごとにcURLリクエストを作成しています。先日突然それは動作を停止し、URLは空の文字列を返すようになりました。

ブラウザでURLをヒットしたり、Pythonでリクエストを受け取ったりすると、期待されるデータが返されます。

私は、PHPでfile_get_contents()関数を使って同じURLを打つことにしました。これは期待通りに動作します。

私は今のところbandaidの解決策を見つけたので、cURLがfile_get_contents()に対して送信するデフォルトのヘッダーと、1つのリクエストをブロックし、もう1つのリクエストを通過させることに違いがありますか?

+1

あなたのcURLリクエストを確認すると便利です。 – cmorrissey

+0

プロキシサーバーを使用するコードを含めてください。 – Gaurav

答えて

3

一般的に言えば、サーバーがPHPカレンダー リクエストをブロックすることは可能ですか?

ユーザーエージェント文字列がカールのように見える場合、サーバーは要求をブロックできます。 -Aオプションを使用してカスタムユーザーエージェント文字列を設定してみてください。

curl -A "Foo/1.1" <url> 

編集:

curl_setopt($curl, CURLOPT_USERAGENT, 'Foo/1.1'); 
1

はカールを忘れ:おっと、私はこれだけCURLOPT_USERAGENTオプションを設定し、あなたは "PHPから" と述べご覧ください。 HTTPリクエストの観点から考えてみましょう。すべてのサーバーはそれを見ています。あなたのカール要求に、サーバーがリクエストをフィルターにかけるために使用できるもの(ユーザーエージェントヘッダーなど)が含まれている場合、これを使用してこれらの要求を拒否できます。

1

多くのウェブサイトがユーザーエージェントに基づいてあなたをブロックしています。私が考えることができる最善の回避策は、Chromeでデベロッパーコンソールを開き、[ネットワーク]タブをクリックすることです。アクセスしようとしているWebサイトのURLに移動し、必要なデータを取得するリクエストを探します。そのリクエストを右クリックし、cURLとしてコピーします。ブラウザが送信しているすべてのヘッダーがあります。

これらのヘッダーをすべてphpのcURLリクエストに追加すると、web-serverはカールのリクエストとブラウザのリクエストの違いを知ることができません。

これらのヘッダーを数年に一度更新する必要があります(いくつかのWebサイトでは、ボットが長年悪用されている古いバージョンのfirefoxやchromeを禁止しようとしています)。

+0

ああ、素晴らしいもの!私はChromeのデベロッパーツールを実際に使用したことはありません。私はいつもFFやSafariにいます。私はリクエストをcURLとしてコピーし、それが十分に機能していることを確認しました。私はヘッダーでいくつか微調整を行い、元のcURLリクエストは今や期待どおりに機能します。 私はあなたが正しいと思う。おそらく私を迎えてくれるのはユーザーエージェントだっただろう。 PHPのfile_get_contents()リクエストがURLを正常に取得し、元のcURLリクエストがもう終了しないというのは不思議です。 ご協力いただきありがとうございます。 – ryes31

+0

@ ryes31リクエストでそのウェブサイトに衝撃を与えている場合(特に、そのウェブサイトがユーザートラフィックを多く得られない場合)、約5-10個の可能なヘッダーの配列を実装し、あなたの要求に対してランダムに選択することを強く推奨します。そうしたやり方では、あなたは小さなネットワークで、別々の異なるユーザーが要求を実行しているように見えます... – Dimi

関連する問題