Ich möchte wissen, wie bei der Fehlerbehebung vorgegangen wird, warum eine Aufforderung zum Einrollen an einen Webserver nicht funktioniert. Ich suche keine Hilfe, die von meiner Umgebung abhängt. Ich möchte nur wissen, wie ich Informationen darüber sammeln kann, welcher Teil der Kommunikation fehlerhaft ist, wie Portnummern usw.
chad-integration:~ # curl -v 111.222.159.30
* About to connect() to 111.222.159.30 port 80 (#0)
* Trying 111.222.159.30... connected
* Connected to 111.222.159.30 (111.222.159.30) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.19.0 (x86_64-suse-linux-gnu) libcurl/7.19.0 OpenSSL/0.9.8h zlib/1.2.3 libidn/1.10
> Host: 111.222.159.30
> Accept: */*
>
* Empty reply from server
* Connection #0 to host 111.222.159.30 left intact
curl: (52) Empty reply from server
* Closing connection #0
Ich verstehe also, dass eine leere Antwort bedeutet, dass curl keine Antwort vom Server erhalten hat. Kein Problem, genau das versuche ich herauszufinden.
Aber welche genaueren Informationen kann ich hier aus cURL ableiten?
Die Verbindung konnte erfolgreich hergestellt werden. Handelt es sich also nicht um eine bidirektionale Kommunikation? Wenn ja, warum kommt die Antwort dann auch nicht? Hinweis: Ich habe festgestellt, dass mein Dienst verfügbar ist und Antworten zurückgesendet werden.
Beachten Sie, dass ich auf dieser Ebene der Vernetzung ein bisschen grün bin. Sie können also allgemeines Orientierungsmaterial bereitstellen.
Antworten:
Möglicherweise müssen Sie dies auf der Serverseite und nicht auf der Clientseite beheben. Ich glaube, Sie verwechseln eine "leere Antwort" mit "keine Antwort". Sie bedeuten nicht dasselbe. Wahrscheinlich erhalten Sie eine Antwort, die keine Daten enthält.
Sie können dies testen, indem Sie einfach Telnet verwenden, anstatt sich zu locken:
Sobald die Verbindung hergestellt ist, fügen Sie Folgendes ein (aus Ihrer Curl-Ausgabe):
Sie sollten die Antwort genau so sehen, wie Curl sie sieht.
Ein möglicher Grund, warum Sie eine leere Antwort erhalten, besteht darin, dass Sie versuchen, auf eine Website zuzugreifen, die ein namensbasierter virtueller Host ist. In diesem Fall können Sie die Site abhängig von der Serverkonfiguration (die Site, auf die Sie zugreifen möchten, ist standardmäßig konfiguriert) nicht ohne viel Arbeit über die IP-Adresse erreichen.
Sie können dies auf der Client-Seite testen, indem Sie einfach die 'Host'-Zeile oben ändern. Ersetzen Sie www.example.com durch die Site, die Sie erreichen möchten:
quelle
* Empty reply from server
Beim direkten Verbinden werden alle relevanten http-Header mit dem Körper angezeigt, der lediglich aus besteht<!-- b5 -->
. Wenn es mit Curl anderswo und nicht in einem bestimmten Netzwerk funktioniert, würde ich die Unterschiede in diesem Netzwerk untersuchen. Ein schlechtes Proxy-Verhalten vielleicht?Curl ist in Ordnung, gibt aber nicht viel Feedback, wenn etwas schief geht. (Wie Sie sehen können) wget kann Ihnen mehr Informationen geben, aber wie Yoonix erwähnt, ist die Serverseite (dh Webserver-Fehlerprotokolle) der Ort, an dem Sie suchen müssen.
Sie können mit auch Hostnamen setzen
quelle
Versuchen Sie diese -> Statt durch cURL, versuchen Sie die Seite Pingen Sie versuchen , mit Telnet zu erreichen. Die Antwort, die Ihr Verbindungsversuch zurückgibt, ist genau das, was cURL sieht, wenn es versucht, eine Verbindung herzustellen (was es Ihnen jedoch nicht behilflich macht). Je nachdem, was Sie hier sehen, können Sie eine von mehreren Schlussfolgerungen ziehen:
Sie versuchen, eine Verbindung zu einer Website herzustellen, die ein namensbasierter virtueller Host ist, dh, sie kann nicht über die IP-Adresse erreicht werden. Der Hostname stimmt nicht - Sie haben möglicherweise etwas falsch geschrieben. Beachten Sie, dass die Verwendung von GET anstelle von POST für Parameter eine konkretere Antwort liefert.
Das Problem kann auch mit dem 100-Fortsetzungs-Header verknüpft sein. Versuchen Sie curl_getinfo ($ ch, CURLINFO_HTTP_CODE) auszuführen und überprüfen Sie das Ergebnis.
quelle
getinfo
Flag oder Feature für CLI-CURL. @see curl.haxx.seIn einigen Fällen unter Windows WSL. Das Ausführen von curl inside bash erzeugt den gleichen Fehler, da Kasperksy die Verbindung zu HTTP / s blockiert.
Dieser Fehler wurde gemeldet hier .
Eine schnelle Lösung besteht darin, den Schutz von Kaspersky für den Port zu deaktivieren, den Sie auf dem Server erreichen möchten (z. B. TCP 80).
Gehen Sie dazu zu Kaspersky - Einstellungen - Netzwerkeinstellungen - aktivieren Sie das Kontrollkästchen "Nur ausgewählte Ports überwachen" - Ports auswählen - doppelklicken Sie auf den Port (80) und wählen Sie "Inaktiv"
quelle