2016-05-10 7 views
7

मैं खुद को एक अनुभवी PHP डेवलपर कहता हूं, लेकिन यह मुझे पागल बनाता है। मैं अद्यतन-चेतावनियों को प्रदर्शित करने के लिए एक भंडार की रिलीज सूचनाएं प्राप्त करने का प्रयास कर रहा हूं, लेकिन मैं 403 त्रुटियों को वापस रखता हूं। इसे सरल बनाने के लिए मैंने गिटहब्स एपीआई का सबसे सरल उपयोग किया: https://api.github.com/zen प्राप्त करें। यह एक हैलो दुनिया की तरह है।file_get_contents() api.github.com से 403 प्राप्त होता है हर बार

यह

  • सीधे ब्राउज़र
  • एक सादे curl https://api.github.com/zen साथ में एक टर्मिनल
  • में एक PHP-Github-एपीआई-क्लास के मामले php-github-api

तरह काम करता है यह नहीं काम करता है

  • एक सरल file_get_contents() एक PHP-Skript

यह मेरे पूरे सरलीकृत कोड है से साथ:

<?php 
    $content = file_get_contents("https://api.github.com/zen"); 
    var_dump($content); 
?> 

ब्राउज़र Warning: file_get_contents(https://api.github.com/zen): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden पता चलता है, चर $content एक बूलियन और false है।

मुझे लगता है कि मुझे कुछ प्रकार के http-header-field याद आ रही हैं, लेकिन न ही मुझे API-Docs में उन सूचनाओं को मिल सकता है, न ही मेरे टर्मिनल curl का उपयोग करता है-किसी भी विशेष शीर्षलेख फ़ाइलों और कार्यों को कॉल करें।

क्या आपके पास कोई संकेत है? अग्रिम में धन्यवाद!

+0

आप उपयोग कर की कोशिश की [फ़िडलर] (http://www.telerik.com/fiddler) अलग-अलग कॉल तुलना करने के लिए? –

+0

'allow_url_fopen' सक्षम है? – Pitchinnate

+0

'allow_url_fopen' सक्षम है। टूल सिफारिश के लिए धन्यवाद @ रिकिक्स, मैं अपने भविष्य के वर्कफ़्लोज़ में शामिल करूंगा। जैसा कि मैंने अनुमान लगाया था, समाधान एक लापता हेडर फ़ील्ड था। चिह्नित उत्तर देखें। –

उत्तर

10

ऐसा इसलिए होता है क्योंकि गिटहब आपको UserAgent शीर्षलेख भेजने की आवश्यकता है। इसे कुछ विशिष्ट होने की आवश्यकता नहीं है। यह करना होगा:

$opts = [ 
     'http' => [ 
       'method' => 'GET', 
       'header' => [ 
         'User-Agent: PHP' 
       ] 
     ] 
]; 

$context = stream_context_create($opts); 
$content = file_get_contents("https://api.github.com/zen", false, $context); 
var_dump($content); 

उत्पादन होता है:

string(35) "Approachable is better than simple." 
+0

उस व्यक्ति ने मदद की, धन्यवाद। क्या आप जानते हैं कि अनुभव से या दस्तावेजों में कोई निर्देश है जो मैंने देखा है? –

+0

शिक्षित अनुमान;) –

+0

एफवाईआई। https://developer.github.com/v3/#user-agent-required> सभी API अनुरोधों में एक वैध उपयोगकर्ता-एजेंट शीर्षलेख शामिल होना चाहिए। उपयोगकर्ता-एजेंट शीर्षलेख वाले अनुरोध अस्वीकार कर दिए जाएंगे। हम अनुरोध करते हैं कि आप उपयोगकर्ता-एजेंट शीर्षलेख मान के लिए अपने गिटहब उपयोगकर्ता नाम या अपने एप्लिकेशन का नाम उपयोग करें। यदि समस्याएं हैं तो यह आपको हमसे संपर्क करने की अनुमति देता है। – haakym

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