繁体   English   中英

PHP curl总是返回http_code 0

[英]PHP curl always returns http_code 0

您好StackOverflow社区,当我尝试在PHP上使用cURL方法时遇到了一个问题。 我尝试使用以下示例代码:

$html_brand = "www.google.com/";
$ch = curl_init();

$options = array(
    CURLOPT_URL            => $html_brand,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER         => true,
    CURLOPT_HTTPHEADER     => array("User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"),
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_SSL_VERIFYHOST => false,
    CURLOPT_ENCODING       => "",
    CURLOPT_AUTOREFERER    => true,
    CURLOPT_CONNECTTIMEOUT => 120,
    CURLOPT_TIMEOUT        => 120,
    CURLOPT_MAXREDIRS      => 10,
);
curl_setopt_array( $ch, $options );
$response = curl_exec($ch); 
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ( $httpCode != 200 ){
    echo "Return code is {$httpCode} \n"
        .curl_error($ch);
} else {
    echo "<pre>".htmlspecialchars($response)."</pre>";
}

curl_close($ch);

它总是以错误结尾,并在屏幕上显示:

返回码为0 Recv失败:连接已重置

或尝试使用https到达任何站点时出现此错误:

返回码为0无法连接到www.google.com端口443:超时

这是我的设置:

  • Windows 7专业版32位
  • 阿帕奇2.4.12
  • PHP 5.6.11

是代码错误还是我未考虑的任何服务器配置?

Apache中的HTTP_HOST值为localhost:8080 ,我不确定它是否与我的问题有关,但也许值得注意。

预先感谢大家。

我已经开发了一个自定义函数,该函数对GET, POST and ajax请求都适用。

所以这是

    function spider($header = array(), $referer = false, $url, $cookie = false,$post = false)
    {
        if (!$cookie)
        {
            $cookie = "cookie.txt";
        }
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate,sdch');
        if (isset($header) && !empty($header))
        {
            curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

        }
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 200);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
        curl_setopt($ch, CURLOPT_USERAGENT,
            "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7");
        curl_setopt($ch, CURLOPT_COOKIEJAR, realpath($cookie));
        curl_setopt($ch, CURLOPT_COOKIEFILE, realpath($cookie));
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        if (isset($referer) && $referer != false)
        {
            curl_setopt($ch, CURLOPT_REFERER, $referer);
        } else
        {
            curl_setopt($ch, CURLOPT_REFERER, $url);
        }
        //if have to post data on the server
        if (isset($post) && !empty($post) && $post)
        {
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
        } //endif
        $data = curl_exec($ch);
        $info = curl_getinfo($ch);
        print_r($info);
        curl_close($ch);
        if($info['http_code'] == 200){
            return ($data);
        }else{
            return false;
        }
    }

因此,参数是

$header =>要发送到服务器的$header ,这应该是associative array

$referer =>引用当前页面(如果有)。

$url =>您要获取的URL。

$cookie => cookie文件,应与调用脚本位于同一级别。

$post =>要发布的数据(如果有)

我测试了此功能,如下所示。

echo spider(FALSE, FALSE, 'https://www.google.com/ncr');

这是我得到的标头。

Array
(
[url] => https://www.google.com/
[content_type] => text/html; charset=UTF-8
[http_code] => 200
[header_size] => 1665
[request_size] => 701
[filetime] => -1
[ssl_verify_result] => 20
[redirect_count] => 1
[total_time] => 2.215
[namelookup_time] => 0
[connect_time] => 0
[pretransfer_time] => 0
[size_upload] => 0
[size_download] => 9024
[speed_download] => 4074
[speed_upload] => 0
[download_content_length] => 0
[upload_content_length] => 0
[starttransfer_time] => 0.437
[redirect_time] => 1.7
[certinfo] => Array
    (
    )

[redirect_url] => 
)

这是此请求的快照。

在此处输入图片说明

希望这个能对您有所帮助...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM