我正在尝试使用cURL从我的网站上读取一些数据。 Todo这我每分钟运行大约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
答案 0 :(得分:2)
500表示内部服务器错误。
也许您发送的请求太快了。
尝试在requets之间添加usleep(500000);
。
答案 1 :(得分:1)
HTTP500表示处理请求时服务器出错。您需要查看http://www.mypage.de/mysite.aspx上的错误。是否有可以检查的消息或有效负载属性?它可能包含应用程序抛出的错误。
我不清楚你是否控制了脚本连接的应用程序?如果没有,并且您只是在抓一个页面,那么您应该在每个请求之前引入几秒钟的睡眠,否则威胁管理网关应用程序将阻止您的脚本(因为它基本上是拒绝服务攻击)。您还应检查并尊重目标网站上Robots.txt的存在。