手動で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のようなライブラリを使用してそのようなツールを書くことはできますが、それが必要な理由は、そのようなライブラリで問題が発生したときに手動で調査するためです。
HTTP(HTTPSではない)の場合、頭に浮かぶ「wget」コマンドの1つの代替手段は、次のようにtelnetを使用することです。
ファイル「input.txt」は、ホスト(hostname)にフィードするプリセットコマンドのリストであり、ファイル「output.txt」は応答を保存します。
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など)ではサポートされていないため、注意が必要です。
私にとっては、リクエストファイルの作成に役立ちました(例: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
ただし、いくつかの点に注意してください。
Content-type: text/plain; charset=utf-8
を含めるとよいでしょう。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
ヘッダーで応答する場合、コマンドはユーザーの操作を待機します。