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

Php 我的cURL代码(http状态为0)有问题吗?,php,curl,Php,Curl,始终获得0的状态,即使我复制并粘贴发送到浏览器中的url,也会得到一个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),

始终获得0的状态,即使我复制并粘贴发送到浏览器中的url,也会得到一个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; 



?>


意识到我遇到了SSL问题。只需将CURLOPT_SSL_VERIFYPEER和CURLOPT_SSL_VERIFYHOST设置为false。有效。

调试curl时,应始终设置CURLOPT_VERBOSE选项。您的超时值看起来很低。

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

我也有同样的问题,在运行curl\u-exec($ch)命令之前,必须先运行curl\u-getinfo($ch)命令

试试看,你会得到积极的结果,我已经将CURLOPT_SSL_VERIFYPEER和CURLOPT_SSL_VERIFYHOST添加到false中

<?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');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
$content = trim(curl_exec($ch));
$http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);

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



?>


只是一个不相关的旁注:PHP有一个非常方便的
http\u build\u query
函数。是
https
,是否返回了任何错误?是的,刚刚意识到检查错误会很有帮助。如果希望使用SSL,可以添加CURLOPT_CAINFO标志并指向证书。比如“curl_setopt($curl,CURLOPT_CAINFO,BASE_DIR./certs/cacert.pem”);”@Xoc:+1从我这里指出安全连接是这里的一个选项。关于如何设置curl超时的详细信息在这里非常完美!这就是我的问题!