23

オブジェクト配列を転送しています。自分のサーバーに cURL クライアント (サブミッター) があり、他のサーバーにリスニング スクリプトがありますが、これは私の管理下にありません。次に、通常の HTML でテストすると動作しているため、着信 cURL リクエストがブロックされていると思います<form>。とにかくcURL経由ではありません。

したがって、彼らはcURLにいくつかの制限を加えたと思います。

次に、私の質問は次のとおりです。

  1. サーバーはcURLの着信リクエストを制限/ブロックできますか?
  2. もしそうなら、開始する cURL スクリプトで HTTP ヘッダー (ユーザー エージェント) をトリック/変更できますか?
  3. それとも他に考えられる話はありますか?

ありがとう!

4

6 に答える 6

42

それでも問題が解決しない場合は、次の手順を実行してください。

1.

$config['useragent'] = 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0';

curl_setopt($curl, CURLOPT_USERAGENT, $config['useragent']);
curl_setopt($curl, CURLOPT_REFERER, 'https://www.domain.com/');

2.

$dir                   = dirname(__FILE__);
$config['cookie_file'] = $dir . '/cookies/' . md5($_SERVER['REMOTE_ADDR']) . '.txt';

curl_setopt($curl, CURLOPT_COOKIEFILE, $config['cookie_file']);
curl_setopt($curl, CURLOPT_COOKIEJAR, $config['cookie_file']);

注:ディレクトリに COOKIES フォルダーが必要です。

3.

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

これらを実行しても問題が解決しない場合は、サンプルの入力/出力/エラーなどを提供してください。そのため、より正確なソリューションを提供できます。

于 2013-07-24T12:11:51.857 に答える
28
  $agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)';
  $curl=curl_init();
  curl_setopt($curl, CURLOPT_USERAGENT, $agent);
于 2013-07-23T03:42:31.100 に答える
6
  1. サーバー側では、http リクエストのヘッダー フィールド (refer、cookie、user-agent などを含む)、IP アドレス、アクセス頻度を認識することで、一部のリクエストをブロックできます。そしてほとんどの場合、マシンによって生成されたリクエストは通常​​、人間のリクエストとは異なる何かを持っています。

  2. 1 によると、より多くの IP アドレスを使用して、ランダムで遅い頻度を使用して、ヘッダー フィールドに入力することにより、実際のリクエストをシミュレートするために最善を尽くすことができます。(攻撃のようです)

  3. 一般に、頻度を低くしてサーバーに大きな負荷をかけず、アクセス ルールに従ってください。リクエストがブロックされることはめったにありません。

于 2013-07-23T03:57:37.280 に答える
1

cURL リクエストは HTTP リクエストであるため、サーバーは cURL リクエストのみをブロックすることはできません。したがって、cURL のユーザー エージェントを変更すると問題を解決できます。サーバーは、UA に表示されたブラウザーを介して接続していると見なすためです。

于 2013-07-23T03:52:38.587 に答える
0

CURL を使用して Web サイトにログインしようとしたときに同じ問題に直面しました。user-agentヘッダーを送信し、ログイン ページに入ったときに Cookie が返されるまで、サーバーは要求を拒否していました。あなたはカールに慣れていません。

$curl = new Curl();

$curl->setHeaders('user-agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0');

// Disable SSL verification
$curl->setOpt(CURLOPT_SSL_VERIFYPEER, '0');

$curl->post($url, $data);

$response = $curl->getRawResponse();
于 2021-01-24T12:49:20.397 に答える