3

我需要从远程 http 服务器获取一些数据。我使用 Curl 类进行多请求。我的问题是远程服务器的防火墙。我在 10000 个 GET 和 POST 请求之间发送 1000 个。服务器禁止我使用 DDOS。

我使用了这个措施。

  • 包仍然包含标题信息

    curl_setopt($this->ch, CURLOPT_HTTPHEADER, $header);

  • 包仍然包含随机引用信息

    curl_setopt($this->ch, CURLOPT_REFERER, $refs[rand(0,count($refs))]);

  • 软件包仍然包含随机用户代理

    curl_setopt($this->ch, CURLOPT_USERAGENT, $agents[rand(0,count($agents))]);

  • 我通过使用睡眠功能以随机间隔发送包裹。

    睡眠(兰德(0,10));

但每次1小时禁止访问服务器。

对不起我的英语不好:) 谢谢大家。

4

1 回答 1

1

在短时间内向服务器发送大量请求可能会产生与 DOS 攻击相同的影响,无论这是否是您的意图。一个快速的解决方法是更改​​睡眠线,sleep(rand(0,10));这意味着有 11 分之一的机会立即发送下一个请求,sleep(3);这意味着请求之间总是有 3 秒(大约)。3 秒应该足以让大多数服务器满意。一旦你验证了这个工作,你可以将值减少到 2 或 1,看看你是否可以加快速度。

一个更好的解决方案是在服务器上创建一个 API,允许您在 1 个或至少几个请求中获取所需的数据。显然,这只有在您能够对服务器进行更改(或者可以说服那些可以代表您进行更改的人)的情况下才有可能。

于 2012-11-10T21:13:58.333 回答