我一直在使用刮刀工具来破解谷歌搜索结果,然后抓取结果网站以寻找匹配特定项目。
我遇到了cURL的问题。我来到了一个导致卷曲进入无限循环的网站。
网站有问题。 http://www.darellyelectrical.com/
当我打开我的数据包嗅探器并查看tcp http数据包时,我发现一遍又一遍地发送了相同的请求。
我无法查明原因,我对其他任何网站都没有问题。
我尝试过设置以下卷曲选项
curl_setopt($ this-> sessions [$ key],CURLOPT_TIMEOUT,$ timeout);
curl_setopt($ this-> sessions [$ key],CURLOPT_MAXREDIRS,2);
curl_setopt($ this-> sessions [$ key],CURLOPT_CONNECTTIMEOUT,1);
如果有人可以用卷曲测试该网址,那就太棒了,如果问题仍然存在,请告诉我。
谢谢
编辑* * 的
function sck_send()
{
$host = "www.darellyelectrical.com";
$path = "";
$fp = fsockopen($host, 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET /".$path." HTTP/1.1\r\n";
$out .= "Host: ".$host."\r\n";
$out .= "Connection: Close\r\n\r\n";
$data = "";
fwrite($fp, $out);
while (!feof($fp))
{
$data .= fgets($fp, 128);
}
fclose($fp);
echo $data;
}
}
sck_send();
this will produce the loop same as curl.
答案 0 :(得分:0)
该服务器需要包含User-Agent标头,否则它不响应。 PHP的curl默认情况下不会设置它,除非您指定它,否则它不会包含在套接字请求中。以下代码适用于我:
<?php
function sck_send() {
$host = "www.darellyelectrical.com";
$path = "";
$fp = fsockopen($host, 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET /".$path." HTTP/1.1\r\n";
$out .= "Host: ".$host."\r\n";
$out .= "User-Agent: Mozilla/5.0 \r\n";
$out .= "Connection: Close\r\n\r\n";
$data = "";
fwrite($fp, $out);
while (!feof($fp)) {
$data .= fgets($fp, 128);
}
fclose($fp);
echo $data;
}
}
sck_send();