php卷挂和无限循环


php curl hanging and infinite loop

我一直在开发一个抓取工具,该工具可以抓取谷歌搜索结果,然后抓取结果网站以匹配特定项目。

不过我对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();