2012-09-08 11 views
40

estoy tratando de correos de acceso de un usuario a través de mensajes de Gmail OAuth 2.0, y estoy calcular esto a través de OAuth 2.0 de Google infantilCómo incluir el encabezado Authorization en cURL POST HTTP Request in PHP?

Aquí, se han especificado Necesito enviar esto como una petición HTTP:

POST /mail/feed/atom/ HTTP/1.1 
Host: mail.google.com 
Content-length: 0 
Content-type: application/json 
Authorization: OAuth SomeHugeOAuthaccess_tokenThatIReceivedAsAString 

he tratado de escribir un código para enviar esta petición como esta:

$crl = curl_init(); 
$header[] = 'Content-length: 0 
Content-type: application/json'; 

curl_setopt($crl, CURLOPT_HTTPHEADER, $header); 
curl_setopt($crl, CURLOPT_POST,  true); 
curl_setopt($crl, CURLOPT_POSTFIELDS, urlencode($accesstoken)); 

$rest = curl_exec($crl); 

print_r($rest); 

No funciona, por favor ayuda. :)

ACTUALIZACIÓN: Tomé Jason consejos McCreary 's y ahora mi código es el siguiente:

$crl = curl_init(); 

$headr = array(); 
$headr[] = 'Content-length: 0'; 
$headr[] = 'Content-type: application/json'; 
$headr[] = 'Authorization: OAuth '.$accesstoken; 

curl_setopt($crl, CURLOPT_HTTPHEADER,$headr); 
curl_setopt($crl, CURLOPT_POST,true); 
$rest = curl_exec($crl); 

curl_close($crl); 

print_r($rest); 

Pero ahora no recibo ninguna salida fuera de este. Creo que cURL falla silenciosamente en alguna parte. Por favor ayuda :)

ACTUALIZACIÓN 2:NOMIKOS 's truco lo hizo por mí. :) :) :) ¡¡Gracias!!

+5

la auto-promoción desvergonzada. Usted puede estar interesado en la lib de OAuth que he escrito: https://github.com/PeeHaa/PHPoAuthLib – PeeHaa

+0

Oh hey, esto se ve muy bien. Lo verificaremos más tarde :) –

+2

@peehaa +1 ..... Lo bueno debe promoverse, no importa cómo. –

Respuesta

14

@ jason-mccreary tiene toda la razón. Además te recomiendo este código para obtener más información en caso de mal funcionamiento:

$rest = curl_exec($crl); 

if ($rest === false) 
{ 
    // throw new Exception('Curl error: ' . curl_error($crl)); 
    print_r('Curl error: ' . curl_error($crl)); 
} 

curl_close($crl); 
print_r($rest); 

EDIT 1

para depurar puede establecer CURLOPT_HEADER true para comprobar la respuesta HTTP con firebug::net o similar.

curl_setopt($crl, CURLOPT_HEADER, true); 

EDIT 2

Sobre Curl error: SSL certificate problem, verify that the CA cert is OK intento de añadir esta cabeceras (sólo para depurar, en una producción de medio ambiente que debe tener estas opciones en true):

curl_setopt($crl, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($crl, CURLOPT_SSL_VERIFYPEER, false); 
+0

Oye, gracias por agregar esto. Ahora me aparece un mensaje de error que dice: Error de ondulación: problema de certificado SSL, verifique que el certificado CA esté bien. Detalles: error: 14090086: rutinas SSL: SSL3_GET_SERVER_CERTIFICATE: verificación de certificado fallido –

+0

¡Funciona! : D ¡Muchas gracias! :) :) –

28

Usted tiene la mayor parte del código ...

CURLOPT_HTTPHEADER para curl_setopt() toma una matriz con cada cabecera como un elemento. Tienes un elemento con múltiples encabezados.

También debe agregar el encabezado Autorización a su matriz $header.

$header = array(); 
$header[] = 'Content-length: 0'; 
$header[] = 'Content-type: application/json'; 
$header[] = 'Authorization: OAuth SomeHugeOAuthaccess_tokenThatIReceivedAsAString'; 
+0

Hola, Um. Todavía no obtiene ningún resultado. :( –

+0

Podría tener más de un problema. Difícil de decir. ¿Algún error? ¿Ha confirmado el token de autenticación? Etc. –

+0

Sí, me estoy haciendo eco de auth_token y parece darme una secuencia bastante larga y buena. verifique mi código actualizado y verifique si se necesita hacer algo.Muchas gracias por tu paciencia. :) –