2010-12-31 11 views
7

Konsekwentnie uzyskanie statusu 0 chociaż gdybym skopiuj i wklej link przesłany w mojej przeglądarce, uzyskać obiekt JSON z powrotemCoś nie tak z moim kodem cURL (stan http 0)?

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



?> 
+0

tylko niepowiązanych marginesie: PHP ma bardzo poręczną 'http_build_query' funkcję. http://php.net/manual/en/function.http-build-query.php – nico

+0

to 'https', czy został zwrócony jakiś błąd? – ajreal

+0

Yup, właśnie zdałem sobie sprawę, że sprawdzenie błędu byłoby pomocne. – Ilya

Odpowiedz

21

sobie sprawę, że miał problemy SSL. Po prostu ustaw CURLOPT_SSL_VERIFYPEER i CURLOPT_SSL_VERIFYHOST na false. Prace.

+7

Jeśli chcesz używać protokołu SSL, możesz dodać flagę CURLOPT_CAINFO i wskazać certyfikat. Podobnie jak "curl_setopt ($ curl, CURLOPT_CAINFO, BASE_DIR." /certs/cacert.pem ");" – joelcox

+1

@Xoc: +1 ode mnie za wskazanie, że bezpieczne połączenie to opcja tutaj. –

3

Powinieneś zawsze ustawić opcję CURLOPT_VERBOSE podczas debugowania dla zwijania. Twoja wartość limitu czasu wygląda bardzo nisko.

17

FYI, można również uzyskać kod statusu równy 0, jeśli połączenie zwinięcia przekroczy limit czasu, zanim serwer zdalny zwróci dane. W takim przypadku musisz ustawić opcje czasu zwijania, aby uniknąć tej sytuacji. Po prostu publikuj to dla każdego, kto ma problemy z stanem 0.

+3

Szczegółowe informacje na temat ustawiania czasu zwijania znajdują się tutaj http://stackoverflow.com/a/11066378/243233 – Jus12

7

miałem ten sam problem, należy uruchomić curl_exec ($ ch) polecenie przed uruchomieniem curl_getinfo ($ ch) polecenie.

+1

Perfect! To był problem dla mnie! – Magnus

4

więc spróbuj to dostaniesz pozytywne rezultaty Dodałem CURLOPT_SSL_VERIFYPEER i CURLOPT_SSL_VERIFYHOST do fałszywego

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



?> 
+0

doskonały. działało dobrze :) –

Powiązane problemy