我的cURL代码有什么问题(http状态为0)?

Ily*_*lya 8 php curl

即使我将发送到我的浏览器的网址复制并粘贴,我也会一直获得0的状态,我得到了一个json对象

<?php


$mainUrl = "https://api.xxxx.com/?";
$co = "xxxxx";
$pa = "xxxx";
$par = "xxxx";
$part= "xxxx";
$partn = "xxxx";
$us= "xxx";
$fields_string;
$fields = array(
            'co'=>urlencode($co),
            'pa'=>urlencode($pa),
            'par'=>urlencode($par),
            'part'=>urlencode($part),
            'partn'=>urlencode($partn),
            'us'=>urlencode($us)
            );

foreach($fields as $key=>$value) { $fields_string .= $key . '=' . $value . '&' ;}

$fields_string = rtrim($fields_string, "&");
$fields_string = "?" . $fields_string;

$url = "https://api.xxxxx.com/" . $fields_string;

$request =  $url; 

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT,'3');
$content = trim(curl_exec($ch));
$http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);

curl_close($ch);
print $url;
print $http_status;
print $content; 



?>
Run Code Online (Sandbox Code Playgroud)

Ily*_*lya 22

意识到我遇到了SSL问题.只需将CURLOPT_SSL_VERIFYPEER和CURLOPT_SSL_VERIFYHOST设置为false即可.作品.

  • 如果要使用SSL,可以添加CURLOPT_CAINFO标志并指向证书.比如'curl_setopt($ curl,CURLOPT_CAINFO,BASE_DIR.'/certs/cacert.pem');' (7认同)

小智 17

仅供参考,如果卷曲连接在远程服务器返回数据之前超时,您还可以获得状态代码0.在这种情况下,您需要设置curl time out选项以避免这种情况.只需将其发布给状态为0的其他人.

  • 有关如何设置卷曲时间的详细信息,请访问http://stackoverflow.com/a/11066378/243233 (3认同)

Fol*_*les 7

我遇到了同样的问题,你必须在运行curl_getinfo($ ch)命令之前运行curl_exec($ ch)命令.

  • 完善!这是我的问题! (2认同)