2012-09-08 18 views
40

मैं Gmails OAuth 2.0 के माध्यम से एक उपयोगकर्ता के पहुंच मेल करने के लिए कोशिश कर रहा हूँ, और मैं गूगल के OAuth 2.0 खेल का मैदानPHP में कर्नल पोस्ट HTTP अनुरोध में प्राधिकरण शीर्षलेख कैसे शामिल करें?

यहाँ के माध्यम से इस पता लगाना कर रहा हूँ, वे निर्दिष्ट किया है मैं एक HTTP अनुरोध के रूप में इस भेजने की जरूरत है:

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

मैं इस तरह इस अनुरोध भेजने के लिए एक कोड लिखने की कोशिश की है:

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

काम नहीं है, कृपया मदद करते हैं। :)

अद्यतन: मैं जेसन McCreary की सलाह मान ली और अब मेरे कोड इस तरह दिखता है:

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

लेकिन मैं इस से बाहर किसी भी उत्पादन नहीं हो रही है। मुझे लगता है कि curl चुपचाप कहीं विफल रहा है। कृपया मदद करें। :)

अद्यतन 2:NomikOS की चाल मेरे लिए ऐसा किया। :) :) :) धन्यवाद!!

+5

बेशर्म आत्म पदोन्नति। आपको ओथ लिब में दिलचस्पी हो सकती है मैंने लिखा है: https://github.com/PeeHaa/PHPoAuthLib – PeeHaa

+0

ओह हे, यह बहुत अच्छा लग रहा है। इसे बाद में देखेंगे :) –

+2

@peeha +1 ..... अच्छी बात को बढ़ावा देना चाहिए, इससे कोई फर्क नहीं पड़ता। –

उत्तर

14

@ जेसन-मैक्ररी पूरी तरह से सही है। इसके अलावा मैं आप इस कोड की सिफारिश की खराबी के मामले में अधिक जानकारी प्राप्त करने:

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

संपादित करें 1

डिबग करने के लिए आप firebug::net या इसी तरह के HTTP प्रतिक्रिया की जाँच करने के सच को CURLOPT_HEADER सेट कर सकते हैं।

curl_setopt($crl, CURLOPT_HEADER, true); 

संपादित 2

बारे Curl error: SSL certificate problem, verify that the CA cert is OK इस हेडर जोड़ने का प्रयास करें (सिर्फ डिबग करने के लिए, एक उत्पादन वातावरण आप true में इन विकल्पों में रखना चाहिए):

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

अरे, इसे जोड़ने के लिए धन्यवाद। अब मुझे एक त्रुटि मिल रही है: कर्ल त्रुटि: SSL प्रमाणपत्र समस्या, सत्यापित करें कि CA प्रमाणपत्र ठीक है। विवरण: त्रुटि: 140 9 0086: एसएसएल दिनचर्या: SSL3_GET_SERVER_CERTIFICATE: प्रमाणपत्र सत्यापित विफल –

+0

काम करता है! : डी बहुत बहुत धन्यवाद! :) :) –

28

आप कोड के सबसे है ...

CURLOPT_HTTPHEADERcurl_setopt() के लिए एक तत्व के रूप में प्रत्येक हेडर के साथ एक सरणी लेता है। आपके पास एकाधिक हेडर वाले एक तत्व हैं।

आपको प्राधिकरण शीर्षलेख को अपने $header सरणी में जोड़ने की आवश्यकता है।

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

अरे, उम। अभी भी कोई आउटपुट नहीं मिल रहा है। :( –

+0

आपको 1 से अधिक समस्या हो सकती है। बताने में मुश्किल। कोई त्रुटि? आपने ऑथ टोकन की पुष्टि की है? आदि –

+0

हाँ, मैं auth_token को प्रतिबिंबित कर रहा हूं और ऐसा लगता है कि मुझे एक बहुत लंबी और अच्छी स्ट्रिंग मिलती है। मेरा अद्यतन कोड जांचें और जांचें कि क्या कुछ भी किया जाना चाहिए।आपके धैर्य के लिए बहुत बहुत धन्यवाद। :) –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^