web-dev-qa-db-fra.com

Comment inclure l'en-tête d'autorisation dans cURL POST Requête HTTP en PHP?)

J'essaie d'accéder aux mails d'un utilisateur via Gmails OAuth 2.0, et j'explique cela via Google OAuth 2.0 Playground

Ici, ils ont spécifié que je dois envoyer ceci en tant que DEMANDE HTTP:

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

J'ai essayé d'écrire un code pour envoyer cette DEMANDE comme ceci:

$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);

Ne fonctionne pas, aidez s'il vous plaît. :)

PDATE: J'ai suivi le conseil de Jason McCreary et voici que mon code ressemble à ceci:

$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);

Mais je n'en tire aucun résultat. Je pense que cURL échoue silencieusement quelque part. S'il vous plaît faire de l'aide. :)

Le truc de PDATE 2: NomikOS l'a fait pour moi. :) :) :) Merci!!

50
user1437671

@ jason-mccreary a totalement raison. De plus je vous recommande ce code pour avoir plus d'informations en cas de dysfonctionnement:

$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

Pour déboguer, vous pouvez définir CURLOPT_HEADER à true pour vérifier la réponse HTTP avec firebug :: net ou similaire.

curl_setopt($crl, CURLOPT_HEADER, true);

EDIT 2

À propos de Curl error: SSL certificate problem, verify that the CA cert is OK essayez d’ajouter ces en-têtes (juste pour déboguer, dans un environnement de production, gardez ces options dans true):

curl_setopt($crl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($crl, CURLOPT_SSL_VERIFYPEER, false);
19
Igor Parra

Vous avez l'essentiel du code…

CURLOPT_HTTPHEADER Pour curl_setopt() prend un tableau avec chaque en-tête en tant qu'élément. Vous avez un élément avec plusieurs en-têtes.

Vous devez également ajouter l'en-tête Authorization à votre tableau $header.

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

utilisez "Content-type: application/x-www-form-urlencoded" au lieu de "application/json"

0
Anudeep Sharma