PHP cURL HTTP CODE返回0

Ard*_*eus 86 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);
Run Code Online (Sandbox Code Playgroud)

cra*_*pty 87

如果您与服务器连接,那么您可以从中获取返回代码,否则它将失败并且您得到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);
Run Code Online (Sandbox Code Playgroud)


Her*_*lur 68

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

print curl_error($ch);
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢你的建议 - 保存了我的屁股:) (5认同)

小智 6

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

if(curl_errno($ch)){   
    echo 'Curl error: ' . curl_error($ch);
}
Run Code Online (Sandbox Code Playgroud)


小智 5

尝试这个:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
Run Code Online (Sandbox Code Playgroud)

  • **这会禁用 HTTPS 验证。除非绝对没有其他办法起作用,否则不要使用它** - 如果确实如此,请优先确定确切的原因以及您可以在堆栈中的其他位置修复什么。 (5认同)
  • 当用已接受的答案回答较旧的问题时,重要的是要指出您的答案所涉及的问题的新方面。此外,通常可以通过添加一些关于它们如何工作以及为什么工作的解释来改进仅代码答案。此外,当建议某人禁用安全性时,解释原因以及风险是什么非常重要。 (4认同)