2011-04-14 15 views
7

Tengo algunas dificultades PARA PUBLICAR un objeto json a una API que usa REST. Soy nuevo en el uso de cURL, pero he buscado todo para tratar de encontrar una respuesta a mi problema, pero me he quedado corto. Mi solicitud cURL siempre devuelve falso. Sé que ni siquiera está publicando mi objeto json porque todavía recibiría una respuesta de la url. Mi código está abajo.cURL PHP RESTful servicio que siempre devuelve FALSO

<?php 

//API KEY = APIUsername 
//API_CODE = APIPassword 
$API_Key = "some API key"; 
$API_Code = "some API code"; 
$API_email = "[email protected]"; 
$API_password = "ohhello"; 
$url = "http://someURL.com/rest.svc/blah"; 


$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_URL, $url); 
header('Content-type: application/json'); 
$authData = "{\"APIUsername\":\"$API_Key\",\"APIPassword\":\"$API_Code\",\"EmailAddress\":\"$API_email\",\"Password\":\"$API_password\"}"; 
curl_setopt($ch, CURLOPT_POSTFIELDS, $authData); 

//make the request 
$result = curl_exec($ch); 
$response = json_encode($result); 
echo $response; 

curl_close() 
?> 

los $ devuelve respuesta sólo "falsa"

¿Alguna idea?

Respuesta

24

$response es probable que sea falso porque curl_exec() devuelve falso (es decir, error) en $result. Echo curl_error($ch) (después de la llamada a curl_exec) para ver el error cURL, si ese es el problema.

En una nota diferente, creo que su CURLOPT_POSTFIELDS está en un formato no válido. No pasa una cadena JSON a eso.

This parameter can either be passed as a urlencoded string like 'para1=val1&para2=val2&...' or as an array with the field name as key and field data as value.

-- PHP docs for curl_setopt()


actualización

La forma más rápida para evitar el error de SSL es añadir esta opción:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

Se obtiene un error de verificación SSL porque el enrollamiento, a diferencia de los navegadores, no tiene una lista precargada de autoridades de certificación confiables (CA), por lo que no se confía en certificados SSL por defecto. La solución rápida es aceptar certificados sin verificación utilizando la línea anterior. La mejor solución es agregar manualmente solo el (los) certificado (s) o CA (s) que desea aceptar. Ver this article on cURL and SSL para más información.

+0

En curl_error ($ ch) Aparece el mensaje a continuación. ¿Esto es un problema con la URL que estoy tratando de publicar? "Problema con el certificado SSL, verifique que el certificado CA sea correcto. Detalles: error: 14090086: rutinas SSL: SSL3_GET_SERVER_CERTIFICATE: verificación de certificado fallida" – stekrose

+1

Creo que eso es bastante común. Pruebe 'curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, false);'. – Wiseguy

+0

Funcionó perfecto. ¡Gracias por la ayuda! – stekrose

Cuestiones relacionadas