Stellen Sie cURL so ein, dass lokale virtuelle Hosts verwendet werden
Apache oder Ngnix ich immer erstellen, Entwicklung von Websites basierend auf realen Projekten, wie http://project1.loc
die nach dem hinzufügen zu meinen .hosts
Datei, der browser hat kein problem mit.
Allerdings, wenn ich Versuch zu machen, eine cURL-Anfrage ( http://project1.loc/post.json
), die gleiche URL habe ich nie alles bekommen, aber ein timeout. Ich gehe davon aus, dass cURL nicht über meine benutzerdefinierte hosts und geht direkt an einen name-server für seine info.
Wie kann ich dieses Problem beheben?
UPDATE
Ich habe einen benutzerdefinierten header "HOST: http://project1.loc" und jetzt bin ich immer 400-Fehler - aber Sie sind augenblicklich, so gehe ich davon aus, dass cURL ist zumindest über die hosts-Datei...
InformationsquelleAutor der Frage Xeoncross | 2010-08-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
EDIT: das ist Zwar momentan akzeptierte Antwort, die Leser finden könnte diese andere Antwort von Benutzer John Hart mehr auf Ihre Bedürfnisse zugeschnitten sind. Es nutzt eine option, die nach Nutzer -Kenwurde eingeführt in version 7.21.3 (das war veröffentlicht im Dezember 2010d.h. nach dieser ersten Antwort).
In der bearbeiteten Frage, bist du mit dem URL als host-name, in der Erwägung, dass es zu sein, muss man nur den Hostnamen.
Versuchen:
wo
project1.loc
ist nur den host-Namen und die127.0.0.1
ist die Ziel-IP-Adresse.(Wenn Sie mit curl aus einer Bibliothek und nicht auf der Kommandozeile, stellen Sie sicher, dass Sie nicht setzen
http://
imHost
header.)InformationsquelleAutor der Antwort Bruno
Eigentlich, LOCKE hat eine option, die explizit für diese:
--resolve
Statt
curl -H 'Host: yada.com' http://127.0.0.1/something
verwenden
curl --resolve 'yada.com:80:127.0.0.1' http://yada.com/something
Was ist der Unterschied, Fragen Sie?
Unter anderem, das funktioniert mit HTTPS. Vorausgesetzt, Ihre lokalen server hat ein Zertifikat für
yada.com
das erste Beispiel oben wird scheitern, weil dieyada.com
Zertifikat nicht mit der127.0.0.1
Hostnamen in der URL.Zweiten Beispiel funktioniert einwandfrei mit HTTPS.
Im wesentlichen, vorbei an einem "Host" - header über
-H
hat hack Ihre Gastgeber in den header setzen, aber umgeht alle curl-host-spezifischer Informationen. Mit--resolve
nutzt alle normalen Logik gilt, sondern einfach vorgibt, das DNS-lookup die Daten zurückgegeben, die in Ihrer Befehlszeilen-option. Es funktioniert genau wie/etc/hosts
sollte.Hinweis
--resolve
nimmt eine port-Nummer, also für HTTPS verwenden Siecurl --resolve 'yada.com:443:127.0.0.1' https://yada.com/something
InformationsquelleAutor der Antwort John Hart
Entweder ein echtes fully qualified domain name (wie
dev.yourdomain.com
) , zeigt auf127.0.0.1
oder probieren Sie Bearbeiten die richtigen hosts-Datei (meist /etc/hosts unter *nix-Umgebungen).InformationsquelleAutor der Antwort Oli
Scheint es, dass dies kein ungewöhnliches problem.
Überprüfen diese ersten.
Wenn das nicht hilft, können Sie die Installation eines lokalen DNS-Servers auf Windows -, wie diese. Sie können Windows so konfigurieren, verwenden Sie localhost als DNS-server. Dieser server kann so konfiguriert werden, dass maßgeblich für was auch immer fake-domains, die Sie brauchen, und die zum weiterleiten von Anfragen an den eigentlichen DNS-Server für alle anderen Anfragen.
Ich persönlich denke, das ist ein bisschen over the top, und kann nicht sehen, warum die hosts-Datei nicht funktionieren würde. Es sollte aber das problem lösen Sie mit. Stellen Sie sicher, Sie setzen Ihren normalen DNS-Server als forwarder als gut.
InformationsquelleAutor der Antwort Matt
Wird der server tatsächlich die Anforderungen, und behandeln Sie den host-Namen (alias) richtig?
Überprüfen Sie Ihre webserver-log, um zu sehen, wie die Anfrage kam, in...
curl-Optionen-dump-request gesendet und die Antwort erhalten, es wird als Spur, die werden in einer Datei gespeichert werden.
--trace
Wenn Sie fehlende host-oder header-Informationen - Sie können erzwingen, das die Header mit der config-option.
Ich würde die curl-Anfrage arbeiten auf der Kommandozeile, und dann versuchen, umzusetzen in PHP.
die config-option ist
-K/--config
die Optionen, die relevant sind in curl sind hier
--trace
Ermöglicht eine vollständige trace-dump, der alle eingehenden und ausgehenden Daten, einschließlich beschreibender Informationen, um die angegebene Ausgabedatei. Verwenden Sie "-" als Dateiname für die Ausgabe an stdout.
-K/--config
Geben Sie die config-Datei zu Lesen curl Argumente aus. Die config-Datei ist eine text-Datei in die BefehlszeilenArgumente können geschrieben werden, die dann verwendet werden, als wenn Sie geschrieben wurden, auf die tatsächlichen
Befehlszeile. Optionen und Ihre Parameter müssen angegeben werden, auf der gleichen config-Datei Zeile, getrennt durch Leerzeichen, Doppelpunkt, Gleichheitszeichen oder eine beliebige Kombination davon ist (jedoch der am günstigsten gelegene separates-
tor ist das ist-gleich-Zeichen). Wenn der parameter Leerzeichen enthalten darf, muss der parameter eingeschlossen in Anführungszeichen ein. Innerhalb von doppelten Anführungszeichen, die folgenden escape-Sequenzen sind verfügbar: \, \", \t, \n,
\r und \v. Ein backslash vor einer anderen Brief wird ignoriert. Wenn die erste Spalte einer config-Zeile ein ' # ' - Zeichen, wird der rest der Zeile wird als Kommentar behandelt. Schreiben nur eine option pro
physikalische Zeile in der config-Datei.
InformationsquelleAutor der Antwort George Lambert
Eine Anfrage an
Führte in der
-H
log-Datei mit:Meine hosts-Datei sieht wie folgt aus:
InformationsquelleAutor der Antwort Xeoncross