it-mure.jp.net

手動HTTP(S)リクエスト

手動でHTTPまたはHTTPS要求を行うことができるツール(おそらくLinux上)を探しています。手動とは、私は本当にそれを意味します:私はそれに次のようなテキストファイルを供給することができるはずです

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

と宛先URL(www.example.com/foo)を入力し、そのURLにリクエストを送信します。せいぜい、Content_Lengthヘッダーが自動的に計算されれば便利です。

Pythonのhttplibのようなライブラリを使用してそのようなツールを書くことはできますが、それが必要な理由は、そのようなライブラリで問題が発生したときに手動で調査するためです。

10
Andrea

wget には--post-fileオプションがあります。

編集:また、 Ncat があります。これは、SSL/HTTPSもサポートしていることを除いて、ランドルフ・リチャードソンのtelnet提案と同様の方法で使用します。

ncat -C --ssl www.example.com 443 < input.txt > output.txt
10
Chris Acheson

HTTP(HTTPSではない)の場合、頭に浮かぶ「wget」コマンドの1つの代替手段は、次のようにtelnetを使用することです。

  • telnetホスト名80 <input.txt> output.txt

ファイル「input.txt」は、ホスト(hostname)にフィードするプリセットコマンドのリストであり、ファイル「output.txt」は応答を保存します。

6

OpenSSLを使用してGETリクエストを発行できます。

openssl s_client -quiet -connect cdn.sstatic.net:443 <<eof
GET /stackexchange/js/universal-login.js HTTP/1.1
Connection: close
Host: cdn.sstatic.net

eof

「HTTP/2」も使用できますが、一部のサーバー(github.comなど)ではサポートされていないため、注意が必要です。

1
Steven Penny

私にとっては、リクエストファイルの作成に役立ちました(例:request.txt

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; charset=utf-8
Content-Length: 11
Connection: close

Hello world

次に、openssl s_clientコマンドを呼び出します。

cat request.txt | openssl s_client -quiet -connect www.example.com:443

ただし、いくつかの点に注意してください。

  • ファイル、特にコンテンツ本文は、適切にエンコードされている必要があります。ファイルがutf-8でエンコードされている場合は、ヘッダーContent-type: text/plain; charset=utf-8を含めるとよいでしょう。
  • ヘッダーの行末CR/LFである必要があります。 LFの場合のみ、WebサーバーはHTTP/1.1 505 HTTP Version Not Supportedを返すことができます。これは、標準のHTTPプロトコルが行末にCR/LFを使用するためです( https://www.w3.org/ Protocols/rfc2616/rfc2616-sec4.html )。unix2dosコマンドを使用してこの変換を行うことができます。
  • Connection: closeヘッダーを追加して、リクエストを終了し、通話から戻ります。それ以外の場合、サーバーが通常Connection: keep-aliveヘッダーで応答する場合、コマンドはユーザーの操作を待機します。
0
F.Igor