php卷曲悬挂和无限循环

时间:2013-11-18 03:02:34

标签: php

我一直在使用刮刀工具来破解谷歌搜索结果,然后抓取结果网站以寻找匹配特定项目。

我遇到了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.

1 个答案:

答案 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();