返回0

我不明白当我回显 $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);
197128 次浏览

传递到 $html _ brand 的确切内容是什么?

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

如上所述,一个失败的请求(也就是说,找不到服务器)会返回 false,没有 HTTP状态码,因为从未收到过回复。

呼叫 curl_error()

Try this after curl_exec to see what's the problem:

print curl_error($ch);

如果它打印的东西像’畸形’,然后检查你的网址格式。

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

检查 curl _ getinfo 之后的 Curl _ error,找出隐藏的错误。

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

I had same problem and in my case this was because curl_exec function is disabled in php.ini. Check for logs:

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

解决方案是从服务器配置文件的 php.ini 中的禁用函数中删除 curl _ exec。

PHP 返回 http 代码0的另一个原因是超时。 在我的例子中,我有以下配置:

curl_setopt($http, CURLOPT_TIMEOUT_MS,500);

事实证明,对我所指向的端点的请求总是需要超过500毫秒,总是超时并且总是返回 http 代码0。

如果删除这个设置(CURLOPT _ TIMEOUT _ MS)或者设置一个更高的值(在我的例子中为5000) ,您将得到实际的 http 代码,在我的例子中为200(正如预期的那样)。

See https://www.php.net/manual/en/function.curl-setopt.php

试试这个:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

If you're using selinux it might be because of security restrictions. Try setting this as root:

# setsebool -P httpd_can_network_connect on

For me, issue wat the URL, untill I encoded url parameter values, I got http code 0.

Also check the order in which the commands are executed.

先是 curl_exec然后是 curl_getinfo

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);