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 :
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.
Ja, Sie können fast jede cURL-Anfrage mit Sockets erstellen.
Meine persönliche Meinung ist, dass Sie bei cURL bleiben sollten, weil:
file_get_contents
schreibt Ihre Anfrage wahrscheinlich neu, nachdem Sie die IP erhalten haben, und erhalten dasselbe wie:
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.
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 .