file_get_contents () vs. curl zum Aufrufen von APIs mit PHP

8

Gemäß der Beschreibung der Google Custom Search-API können Sie sie wie im folgenden Beispiel mit dem GET-Verb der REST-Schnittstelle aufrufen:

%Vor%

Ich habe meinen API-Schlüssel und meine benutzerdefinierte Suchmaschine eingerichtet, und als ich meine Testabfrage direkt in meinen Browser eingefügt habe, hat es funktioniert und ich habe die JSON-Datei angezeigt bekommen.

Dann habe ich versucht, die API von meinem PHP-Code aus aufzurufen:

%Vor%

Where $ url war die selbe, die im Browser funktioniert hat, aber mein PHP-Code starb, als ich versuchte, ihn zu öffnen.

Danach habe ich es mit Curl versucht, und es hat funktioniert. Der Code war dies:

%Vor%

Fragen :

  1. Wie kommt es, dass file_get_contents () nicht funktioniert hat und curl?
  2. Könnte ich auch fsocket dafür verwenden?
Daniel Scocco 11.03.2012, 21:31
quelle

3 Antworten

11

Frage 1:

Zuerst sollten Sie die Einstellung allow_url_fopen einchecken, AFAIK das ist der einzige Grund, warum file_get_contents() nicht funktionieren sollte. Auch veraltet safe_mode kann dies verursachen.

Oh, basierend auf deinem Kommentar musst du http:// zur URL hinzufügen, wenn du mit Dateisystem Funktionen, es ist ein Wrapper , der php sagt, dass Sie eine http-Anfrage brauchen, ohne dass es die Funktion denkt Sie müssen ./google.com (das gleiche wie google.txt ) öffnen.

Frage 2:

Ja, Sie können fast jede cURL-Anfrage mit Sockets erstellen.

Meine persönliche Meinung ist, dass Sie bei cURL bleiben sollten, weil:

  • Timeout-Einstellungen
  • behandelt alle möglichen HTTP-Zustände
  • einfache und detaillierte Konfiguration (es ist keine detaillierte Kenntnis der HTTP-Header erforderlich)
Vyktor 11.03.2012, 21:39
quelle
4

file_get_contents schreibt Ihre Anfrage wahrscheinlich neu, nachdem Sie die IP erhalten haben, und erhalten dasselbe wie:

%Vor%

Viele Server werden Ihnen den Zugriff verweigern, wenn Sie die IP-Adressierung in der Anfrage durchlaufen.
Mit cURL existiert dieses Problem nicht. Es löst den Hostnamen auf und lässt die Anfrage so, wie Sie sie festgelegt haben, so dass der Server nicht unhöflich antwortet.
Dies könnte auch die "Ursache" sein.

    
Filkor 11.03.2012 21:43
quelle
3

1) Warum verwenden Sie die Anführungszeichen beim Aufruf von file_get_contents ?

2) Wie bereits im Kommentar erwähnt, erfordert file_get_contents , dass allow_url_fopen auf Ihrer php.ini .

3) Sie könnten fsockopen verwenden, aber Sie müssten HTTP Requests / Responses manuell bearbeiten, um das Rad neu zu erfinden, wenn Sie cURL haben. Das gleiche gilt für socket_create .

4) Zum Titel dieser Frage: cURL kann anpassungsfähiger und nützlicher für die Arbeit mit komplexen HTTP-Transaktionen als file_get_contents sein. Es sollte jedoch erwähnt werden, dass die Arbeit mit Stream-Kontexten möglich ist viele Einstellungen für Ihre file_get_contents -Aufrufe. Ich denke jedoch, dass cURL noch vollständiger ist, da es Ihnen zum Beispiel die Möglichkeit gibt, mit mehrere parallele Handler .

    
El Barto 11.03.2012 21:44
quelle

Tags und Links