9

Consistently getting a status of 0 even though if I copy and paste the url sent into my browser, I get a json object right back

<?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; 



?>
Ilya
  • 1,215
  • 1
  • 14
  • 25

5 Answers5

24

Realized that I was having SSL issues. Simply set CURLOPT_SSL_VERIFYPEER and CURLOPT_SSL_VERIFYHOST to false. Works.

Ilya
  • 1,215
  • 1
  • 14
  • 25
  • 7
    If you wish to use SSL, you can add the CURLOPT_CAINFO flag and point to a certificate. Like 'curl_setopt($curl, CURLOPT_CAINFO, BASE_DIR . '/certs/cacert.pem');' – joelcox Dec 31 '10 at 18:55
  • 1
    @Xoc: +1 from me for pointing out that a secure connection is an option here. – Benjamin Seiller Feb 03 '11 at 23:23
17

FYI, you can also get a status code of 0 if the curl connection times out before the remote server returns data. In that case you need to set curl time out options to avoid that situation. Just posting this for anyone else having status 0 problems.

Henry
  • 171
  • 1
  • 3
  • 3
    Details on how to set the curl time out are here http://stackoverflow.com/a/11066378/243233 – Jus12 Mar 01 '13 at 12:29
9

I had the same problem, You MUST run the curl_exec($ch) command before you run the curl_getinfo($ch) command.

Folding Circles
  • 454
  • 2
  • 5
  • 13
4

so try this you will get positive results i have added CURLOPT_SSL_VERIFYPEER and CURLOPT_SSL_VERIFYHOST to 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; 



?>
fresher
  • 127
  • 11
3

You should always set the option CURLOPT_VERBOSE when you are debugging for curl. Your timeout value looks very low.

koan
  • 3,596
  • 2
  • 25
  • 35