質問

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要求をブロックしたいと考えています。 ブラウザからのリクエストをシミュレート/ふりをしたい場合は、少なくとも次のことを行う必要があります。

  1. ブラウザとまったく同じヘッダーを渡します(つまり、 Firebug を使用してヘッダーを取得します))

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    

  2. ユーザーエージェント(ブラウザの名前)を変更する

    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    

  3. Cookieを有効にする(リダイレクトやセッション処理など)

    curl_setopt ($ch, CURLOPT_COOKIEJAR, $file);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
    

  4. 参照者を追加する

    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ブラウザがリクエストを行っていると見なします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top