質問
ZOHO APIに取り組んでおり、cURLを使用してレコードを更新しようとしています。さまざまなcURLバリエーションを試しましたが、常に「false」が返されます。しかし、ブラウザを使用して同じURLを呼び出すと、機能します。
cURLリクエストをブロックする方法はありますか?POSTまたはGETリクエストを使用してそのURLを呼び出す方法は他にありますか?
私が試したcURLコードは次のとおりです: ジェネラコディセタグプレ
解決
サーバは、CURL要求をブロックすることはできませんが、それらは好きではない要求をブロックできます。CURL要求が満たされない一部のパラメータを検索した場合は、異なるように応答することを決定できます。
大多数の場合、この動作のこの違いは、HTTP要求ヘッダの存在(または不在)と値によってトリガされます。たとえば、サーバーはUser-Agent
ヘッダーが存在し、有効な値を持ち、他のものもチェックできます。
ブラウザからのHTTP要求がどのように見えるかを調べるには、 fiddler のようなHTTPデバッグプロキシを使用してください。またはあなたのブラウザの開発者ツール。
あなたのカール要求にあなた自身のヘッダーを追加するには、を使用してください
curl_setopt($ch, CURLOPT_HTTPHEADER, array('HeaderName: HeaderValue'));
. 他のヒント
多くのWebサーバーは、ボットの悪用を防ぐために、ブラウザー以外の何かによって偽造されたHTTP要求をブロックしたいと考えています。 ブラウザからのリクエストをシミュレート/ふりをしたい場合は、少なくとも次のことを行う必要があります。
-
ブラウザとまったく同じヘッダーを渡します(つまり、 Firebug を使用してヘッダーを取得します))
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
-
ユーザーエージェント(ブラウザの名前)を変更する
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
-
Cookieを有効にする(リダイレクトやセッション処理など)
curl_setopt ($ch, CURLOPT_COOKIEJAR, $file); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
-
参照者を追加する
curl_setopt($curl, CURLOPT_REFERER, 'http://www.google.com'); curl_setopt($curl, CURLOPT_AUTOREFERER, true);
そして、あなたが何も見逃していないことを祈ります!
質問に答えるには「CURLリクエストをブロックする方法はありますか?」:はい、実際、User-Agent
ヘッダーを読み取ることでcURLリクエストを検出できます。
curl_setopt($ch, CURLOPT_USERAGENT, 'My user agent string!');
を呼び出すことでユーザーエージェントを変更できます。
これについてもう少し詳しく説明すると、curl_setopt($ ch、CURLOPT_USERAGENT、 'Mozilla / 5.0');を使用できます。または、ユーザーエージェントを偽造するためのそのようなもの。この場合、サーバーはFirefoxブラウザがリクエストを行っていると見なします。