PHP cURL HTTP CODE返回0

时间:2012-04-19 12:16:36

标签: php curl

我不明白,当我回复$ httpCode时,我总是得到0,当我将$ html_brand更改为一个破碎的URL时,我期待404。有什么我想念或不知道的吗?感谢。

 //check if url exist
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $html_brand);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($ch); 
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 404) {
    echo "The Web Page Cannot Be Found";
    return;
}
curl_close($ch);

10 个答案:

答案 0 :(得分:77)

如果您与服务器连接,那么您可以从中获取返回代码,否则它将失败并且您获得0.因此,如果您尝试连接到“www.google.com/lksdfk”,您将获得返回代码400,如果你直接去google.com,你会得到302(如果你转到下一页则会得到200 ...好吧,我这样做是因为它转发到google.com.br,所以你可能得不到如果你去“googlecom”你会得到一个0(找不到主机),所以对于最后一个,没有人可以发回代码。

使用以下代码进行测试。

<?php

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

$options = array(
    CURLOPT_URL            => $html_brand,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER         => true,
    CURLOPT_FOLLOWLOCATION => true,
    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);

答案 1 :(得分:61)

在curl_exec之后尝试一下,看看问题是什么:

print curl_error($ch);

如果打印出类似'格式错误'的内容,请检查您的网址格式。

答案 2 :(得分:2)

检查curl_getinfo之后的curl_error以找出隐藏的错误。

if(curl_errno($ch)){   
    echo 'Curl error: ' . curl_error($ch);
}

答案 3 :(得分:2)

我有同样的问题,在我的情况下,这是因为在php.ini中禁用了curl_exec函数。检查日志:

PHP Warning:  curl_exec() has been disabled for security reasons in /var/www/***/html/test.php on line 18

解决方法是从服务器配置文件中的php.ini中的已禁用函数中删除curl_exec。

答案 4 :(得分:1)

您传入$ html_brand的确切内容是什么?

如果它的URL语法无效,您很可能会得到HTTP代码0。

答案 5 :(得分:1)

与上述here及以下内容一样,失败的请求(即找不到服务器)返回false,没有HTTP状态代码,因为从未收到回复。

致电curl_error()

答案 6 :(得分:1)

尝试一下:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

答案 7 :(得分:0)

PHP返回HTTP代码0的另一个原因是超时。 就我而言,我具有以下配置:

curl_setopt($ http,CURLOPT_TIMEOUT_MS,500);

事实证明,指向我指向的端点的请求始终花费超过500毫秒,始终超时并且始终返回http代码0。

如果您删除此设置(CURLOPT_TIMEOUT_MS)或设置更高的值(在我的情况下为5000),您将获得实际的http代码,在我的情况下为200(按预期)。

请参见https://www.php.net/manual/en/function.curl-setopt.php

答案 8 :(得分:0)

如果使用selinux,可能是由于安全限制。尝试将其设置为root:

# setsebool -P httpd_can_network_connect on

答案 9 :(得分:0)

对我来说,发出 URL,直到我编码了 url 参数值,我得到了 http 代码 0。