Ich suche ein Tool (möglicherweise unter Linux), mit dem ich eine manuelle HTTP- oder HTTPS-Anfrage stellen kann. Mit manuell meine ich es wirklich so: Ich sollte in der Lage sein, ihm eine Textdatei zuzuführen, die aussieht
POST /foo HTTP/1.1
Host: www.example.com
Accept: text/xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5
Content-Type: text/plain
Content-Length: 11
Hello world
und eine Ziel-URL (www.example.com/foo) und senden Sie die Anfrage an die URL. Es wäre höchstens nützlich, wenn der Content_Length-Header automatisch berechnet würde.
Ich könnte ein solches Tool mit einer Bibliothek wie httplib in Python schreiben, aber genau der Grund, warum ich es brauche, ist die manuelle Untersuchung, wenn bei solchen Bibliotheken etwas schief geht.
Antworten:
wget hat eine --post-file Option, die für Sie funktionieren sollte.
Bearbeiten: Außerdem gibt es Ncat , das Sie ähnlich wie Randolf Richardsons Telnet-Vorschlag verwenden würden, außer dass es auch SSL / HTTPS unterstützt:
quelle
Für HTTP (nicht HTTPS) besteht eine Alternative zum Befehl "wget" darin, Telnet wie folgt zu verwenden:
Die Datei "input.txt" ist Ihre Liste voreingestellter Befehle, die Sie unter Hostname an den Host senden möchten, und die Datei "output.txt" speichert die Antwort.
quelle
Sie können eine GET-Anfrage mit OpenSSL stellen:
Beachten Sie, dass Sie auch "HTTP / 2" verwenden können. Seien Sie jedoch vorsichtig, da einige Server (z. B. github.com) dies nicht unterstützen.
quelle
Für mich war es eine Anfrage - Datei erstellen (Beispiel:
request.txt
)Und dann rufen Sie den
openssl s_client
Befehl auf:cat request.txt | openssl s_client -quiet -connect www.example.com:443
Seien Sie jedoch in einigen Punkten vorsichtig:
Content-type: text/plain; charset=utf-8
einfügen, wenn die Datei utf-8-codiert ist.HTTP/1.1 505 HTTP Version Not Supported
, da das Standard-HTTP-Protokoll CR / LF für Zeilenenden verwendet ( https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html ). Sie können denunix2dos
Befehl verwenden, um diese Konvertierung durchzuführen.Connection: close
Header hinzu, um die Anforderung zu beenden und vom Anruf zurückzukehren. Andernfalls wartet der Befehl auf die Benutzerinteraktion, wenn der Server normalerweise mit einemConnection: keep-alive
Header antwortet .quelle
Ich bin überrascht, dass niemand cURL erwähnt hat . Es ist genau für das gemacht , was Sie tun möchten. Und es ist auf praktisch jeder Plattform (einschließlich Windows) verfügbar.
Für Ihr Beispiel würden Sie also nur Folgendes tun:
Was von Wireshark aufgenommen wurde, bringt Ihnen Folgendes ein:
Sie können die Header leicht weiter modifizieren, wenn Sie alle möglichen Dinge tun möchten (z. B. den Benutzeragenten ändern usw.).
Bearbeiten: Die Anforderung "Aus einer Datei" wurde nicht bemerkt. Sie können dies auch tun, entweder einfache ASCII- oder Binärdateien. Sie geben einfach den Dateinamen mit einem @ -Symbol an
quelle