我一直在开发一个抓取工具,该工具可以抓取谷歌搜索结果,然后抓取结果网站以匹配特定项目。
不过我对cURL有问题。我遇到了一个导致旋度进入无限循环的位置。
有问题的网站。http://www.darellyelectrical.com/
当我打开我的数据包嗅探器,查看tcphttp数据包时,我发现同一个请求被一次又一次地发送。
我无法确定原因,我对任何其他网站都没有问题。
我已经尝试设置以下卷曲选项
curl_setopt($this->sessions[$key],CURLOPT_TIMEOUT,$TIMEOUT);
curl_setopt($this->sessions[$key],CURLOPT_MAXREDIRS,2);
curl_setopt($this->sessions[$key],CURLOPT_CONNECTTIMEOUT,1);
如果有人能用curl测试这个url,并让我知道问题是否仍然存在,那就太好了。
感谢
编辑**
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.
该服务器需要包含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();