2012-09-08 23 views
40

Ben Gmail'in OAuth 2.0 ile kullanıcının erişim postalara çalışıyorum ve Google'ın OAuth 2.0 Bahçesi İşteYetkilendirme üstbilgisini PHP'de cURL POST HTTP İsteği nasıl eklenir?

aracılığıyla bu öğrenmeye çalışıyorum, benim bir HTTP İSTEĞİ olarak bu göndermek gerekir belirttiğiniz:

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

böyle bu İSTEK göndermek için bir kod yazmadan denedim: çalışmıyor

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

, yardım edin. :)

GÜNCELLEME: Ben Jason McCreary 'ın tavsiye aldı ve şimdi benim kod şöyle görünür:

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

Ama bunun dışında herhangi bir çıktı alamıyorum. Bence CURL bir yerlerde sessizce başarısız oluyor. Lütfen yardım edin. :)

GÜNCELLEME 2:Nomikos 'ın hile benim için yaptı. :) :) :) Teşekkür ederim!! curl_setopt() için Sen kod çoğuna sahip

+5

Shameless kendini promosyon. Yazdığınız oAuth lib ile ilgilenebilirsiniz: https://github.com/PeeHaa/PHPoAuthLib – PeeHaa

+0

Ah, bu oldukça güzel görünüyor. Daha sonra kontrol edecek :) –

+2

@peehaa +1 ..... iyi bir şey nasıl tanıtılmalı, nasıl teşvik edilmelidir. –

cevap

14

@ jason-mccreary tamamen haklıdır. Ben size bu kodu tavsiye yanında arıza durumunda fazla bilgi almak için: 1

Eğer firebug::net veya benzer HTTP yanıtı kontrol etmek true CURLOPT_HEADER ayarlayabilirsiniz hata ayıklamak için

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

DÜZENLEME.

curl_setopt($crl, CURLOPT_HEADER, true); 

DÜZENLEME 2

bu başlıkları ekleme hakkında Curl error: SSL certificate problem, verify that the CA cert is OK deneyin (sadece hata ayıklamak, sen true bu seçenekleri tutmalı çevre bir üretim):

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

Hey, bunu eklediğiniz için teşekkürler. Şimdi bir hata alıyorum: Curl hatası: SSL sertifikası sorunu, CA sertifikasının doğru olduğunu doğrulayın. Ayrıntılar: hata: 14090086: SSL rutinleri: SSL3_GET_SERVER_CERTIFICATE: sertifika doğrulanamadı –

+0

İşleri! : D Çok teşekkür ederim! :) :) –

28

...

CURLOPT_HTTPHEADER bir unsuru olarak her başlığıyla bir dizi alır. Birden çok başlık içeren bir öğeniz var.

Ayrıca Yetkilendirme başlığını $header dizinize eklemeniz gerekir.

+0

Hey, Um. Hala hiç çıktı almıyor. :( –

+0

1'den fazla probleminiz olabilir: Anlatmak zor… Herhangi bir hata var mı? Doğrulama belirtecini onayladınız mı? –

+0

Evet auth_token yankılanıyorum ve bana oldukça uzun ve güzel bir ip vermiş gibi görünüyor. güncellenmiş kodumu kontrol et ve herhangi bir şey yapılması gerekiyorsa kontrol et.Sabrınız için çok teşekkür ederim. :) –

İlgili konular