2012-04-19 153 views
70

我不明白当我echo $ httpCode我总是得到0,我期待404当我改变$ html_brand成破碎的网址。有什么我想念或不知道的?谢谢。PHP cURL HTTP代码返回0

//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); 

回答

65

如果你连接服务器,那么你可以从它得到一个返回码,否则它会失败,你会得到一个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); 
+0

此外thx为refencing followlocation,有时我得到301这是一个重定向问题。 – Ardeus 2012-04-20 07:16:21

+0

即使$ response有html内容,它也很奇怪,但$ httpcode总是返回0,加上curl_error为null。有可能出错了。我只包含returntransfer,header(false),仅在设置中跟踪位置。 – Ardeus 2012-05-02 12:08:07

+0

非常有用!非常感谢你。 – 2017-08-04 11:53:29

1

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

如果有一个无效的URL语法,你很可能会得到HTTP代码0

1

就像说here及以下,失败的请求(即找不到服务器)返回false,没有HTTP状态码,因为从未收到回复。

致电curl_error()

54

试试这个后curl_exec,看看有什么问题:

print curl_error($ch); 

如果是打印类似“畸形”然后检查你的URL格式。

+4

谢谢你的建议 - 救了我的屁股:) – wbj 2015-02-11 18:48:41

+0

是的!保存我的屁股。 – pimbrouwers 2016-10-31 13:25:11

1

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

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

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

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

解决方法是删除禁用功能curl_exec在服务器配置php.ini文件。