2016-05-10 13 views
7

Kendimi deneyimli bir PHP geliştiricisi olarak adlandırıyorum, ama bu beni çıldırtıyor. Güncelleştirme uyarılarını görüntülemek için bir depo hakkında bilgi yayımlamaya çalışıyorum, ancak 403 hatası döndürmeye devam ediyorum. Basitleştirmek için GitHubs API'sinin en basit kullanımını kullandım: GET https://api.github.com/zen. Bu merhaba bir dünya.file_get_contents() api.github.com'dan 403 alır her zaman

Bu Bu

değil çalışır php-github-api

gibi bir PHP-Github-API-Class ile bir terminal

  • bir düz curl https://api.github.com/zen tarayıcının
  • yılında

    • doğrudan çalışır
      • Bu benim bütün basitleştirilmiş kodu bir PHP-Skript

      basit bir file_get_contents() ile:

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

      tarayıcı Warning: file_get_contents(https://api.github.com/zen): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden gösterir, değişken $content bir boolean ve false olduğunu.

      Sanırım bir çeşit http-başlık alanları eksik, ama ne bu bilgileri API-Docs'da bulabilirim, ne de curl numaralı terminalimi kullanır, herhangi bir özel başlık dosyası ve işe yarar.

      Herhangi bir ipucunuz var mı? Şimdiden teşekkürler!

  • +0

    kullanmakta denedin mi [Fiddler] (http://www.telerik.com/fiddler) farklı aramaları karşılaştırmak için? –

    +0

    'allow_url_fopen' etkin mü? – Pitchinnate

    +0

    'allow_url_fopen' etkin. Araç tavsiyesi için teşekkürler @RickS, bunu gelecekteki iş akışlarımda içerecek. Çözüm, tahmin ettiğim gibi eksik bir başlık alanıydı. İşaretli cevaba bakınız. –

    cevap

    10

    Bunun nedeni, GitHub'un UserAgent üstbilgisini göndermenizi gerektirmesidir. Belirli bir şey olması gerekmiyor. Bu yapar:

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

    çıktısı:

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

    Bu yardımcı oldu, teşekkürler. Deneyimden biliyor muyum, yoksa belgelediğim dokümanlarda herhangi bir talimat var mı? –

    +0

    Eğitimli tahmini;) –

    +0

    FYI. https://developer.github.com/v3/#user-agent-required> Tüm API istekleri geçerli bir User-Agent başlığı içermelidir ZORUNLU. Kullanıcı Aracısı üstbilgisi olmayan istek reddedilir. Kullanıcı-Aracı üstbilgi değeri için GitHub kullanıcı adınızı veya uygulamanızın adını kullanmanızı rica ediyoruz. Bu, sorun varsa size ulaşmamızı sağlar. – haakym