私はZOHO APIに取り組んでおり、cURLを使用してレコードを更新しようとしています。さまざまなcURLのバリエーションを試しましたが、常に「false」を返します。しかし、ブラウザを使用して同じURLを呼び出すと、機能します。
彼らがcURLリクエストをブロックする方法はありますか? POSTまたはGETリクエストを使用してそのURLを呼び出すことができる他の方法はありますか?
私が試したcURLコードは次のとおりです:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
$data = curl_exec($ch);
curl_close($ch);
サーバーはcURLリクエスト自体をブロックすることはできませんが、不要なリクエストはブロックできます。サーバーがcURLリクエストが満たさないいくつかのパラメーターをチェックする場合、別の方法で応答することを決定できます。
ほとんどの場合、この動作の違いは、HTTPリクエストヘッダーの存在(または不在)と値によって引き起こされます。たとえば、サーバーはUser-Agent
ヘッダーが存在し、有効な値を持っています(他の多くのものもチェックできます)。
ブラウザーからのHTTPリクエストがどのように見えるかを確認するには、 Fiddler などのHTTPデバッグプロキシまたはブラウザーの開発者ツールを使用します。
独自のヘッダーをcURLリクエストに追加するには、次を使用します
curl_setopt($ch, CURLOPT_HTTPHEADER, array('HeaderName: HeaderValue'));
多くのWebサーバーは、ボットの悪用を防ぐために、ブラウザー以外のものによって偽造されたHTTP要求をブロックしたいと考えています。ブラウザからのリクエストをシミュレート/見せかけたい場合は、少なくとも次のことを行う必要があります。
ブラウザとまったく同じヘッダーを渡します(ie 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ブラウザーが要求を行っていると見なします。