我正在尝试使用cURL从我的网站读取一些数据。为了做到这一点,我每分钟向我的服务器运行大约50-60个请求。在大约30个请求时,脚本似乎停止了工作,但我发现我突然从我的curl请求中得到一个状态码500。
这个例程没有什么特别的,它增加一个月的实际天数,直到它达到月底。每天我都会读一些东西(不是这段代码的一部分)。
下面的代码显示了我如何发出cURL请求。在30个请求后,它向我发送了500个请求,但是当我在没有循环的情况下再次尝试时,只收到31个请求,它很好,所以它只对我的大量请求不起作用。
你知道问题在哪里吗?
谢谢!
// To get an ASP.NET SessionID I first visit the page as usual...
$c = curl_init();
curl_setopt($c, CURLOPT_URL, "http://www.mypage.de/mysite.aspx");
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_COOKIEFILE, "cookies.txt");
curl_setopt($c, CURLOPT_COOKIEJAR, "cookies.txt");
$o = curl_exec($c);
curl_close($c);
//start the request
$c = curl_init();
curl_setopt($c, CURLOPT_URL, "http://www.mypage.de/mysite.aspx");
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($c, CURLOPT_COOKIEFILE, "cookies.txt");
curl_setopt($c, CURLOPT_COOKIEJAR, "cookies.txt");
curl_setopt($c, CURLOPT_HTTPHEADER, array('Content-Length' => '999'));
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_HEADER, 1);
$headers = array();
//$headers[] = "Referer: http://www.mypage.de/mysite.aspx";
//$headers[] = "Content-Length: 999";
$data = "somevalidpostdata";
curl_setopt($c, CURLOPT_POSTFIELDS, $data);
$o = curl_exec($c);
$status = curl_getinfo($c, CURLINFO_HTTP_CODE);
echo "'r'n" . $status . "'r'n";
curl_close($c);
谢谢,WorldSignia
500表示内部服务器错误。
也许你发送请求的速度太快了。尝试在请求之间添加usleep(500000);
HTTP500表示服务器在处理请求时出了问题。您需要查看http://www.mypage.de/mysite.aspx上的错误。是否有可以检查的消息或有效负载属性?它可能包含应用程序抛出的错误。
这是不清楚我如果你控制的应用程序,你的脚本连接?如果没有,而且您只是抓取一个页面,那么您应该在每个请求之前引入几秒钟的睡眠,否则威胁管理网关应用程序将阻止您的脚本(因为它基本上是拒绝服务攻击)。此外,您应该检查并尊重目标网站上Robots.txt的存在。