Что-то не так с моим кодом cURL (статус http 0)? - PullRequest
8 голосов
/ 31 декабря 2010

Последовательно получая статус 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; 



?>

Ответы [ 5 ]

21 голосов
/ 31 декабря 2010

Понял, что у меня проблемы с SSL.Просто установите для CURLOPT_SSL_VERIFYPEER и CURLOPT_SSL_VERIFYHOST значение false.Работает.

17 голосов
/ 16 августа 2011

Между прочим, вы также можете получить код состояния 0, если время ожидания подключения к серверу истекло до того, как удаленный сервер вернет данные.В этом случае вам нужно установить параметры тайм-аута, чтобы избежать этой ситуации.Просто опубликуйте это для всех, у кого проблемы со статусом 0.

7 голосов
/ 29 декабря 2012

У меня была такая же проблема, вы ДОЛЖНЫ выполнить команду curl_exec ($ ch) , прежде чем запустить команду curl_getinfo ($ ch) .

4 голосов
/ 20 декабря 2013

так что попробуйте это, вы получите положительные результаты. Я добавил 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; 



?>
3 голосов
/ 31 декабря 2010

Вы всегда должны устанавливать опцию CURLOPT_VERBOSE при отладке для curl. Ваше значение тайм-аута выглядит очень низким.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...