コマンドtelnet docs.python.org 80
を使用すると、実際のリクエストを入力して、http://docs.python.org/2/license.html
への手動のHTTPリクエストを実行できます。
次に、ライブで入力する代わりに、テキストファイルからリクエストをフィードします。
私はこれを試しました:
cat request.txt|telnet docs.python.org 80
request.txt:
GET /2/license.html HTTP/1.1
Host: docs.python.org
(ファイルを空白行で終了する必要があります。そうしないと、不正な要求が発生します!)
しかし、サーバーへの接続はすぐに閉じられます。
request.txtをtelnet docs.python.org 80
に正しくパイプするにはどうすればよいですか?
編集:
知っておくと便利です。 HEAD
の代わりにGET
を使用すると、メッセージ本文を除いて、GET
リクエストを実行した場合と同じレスポンスが返されます。
したがって、HTTPヘッダーだけを調べたい場合は、HEAD
を使用します。 (つまり、応答の内容がシェル出力を乱雑にしないようにするためです。)
「telnet」ではなくnetcat(ncコマンド)を使用するので、
cat request.txt | nc docs.python.org 80
Telnetは素早く簡単なハックですが、netcatは明らかに、この仕事に適したツールです。
私は実際にtelnet
の経験はありませんが、ファイルリダイレクトから入力を受け取ります。
telnet < abc.txt
次のようにして、サーバーに正しく接続できます。
$ cat abc.txt
open docs.python.org 80
$ telnet < abc.txt
telnet> Trying 82.94.164.162...
Connected to dinsdale.python.org.
Escape character is '^]'.
Connection closed by foreign Host.
多分あなたはそれがGET
コマンドを受け入れるようにする方法を理解することができますが、私はできませんでした。別の方法は expect
スクリプトを使用することです:
#!/usr/bin/expect
spawn telnet docs.python.org 80
expect "Escape character is '^]'." {
send "GET /2/license.html HTTP/1.1\nHost: docs.python.org\n\n"
}
interact
次に、スクリプトをtelnet.exp
として保存し、実行可能にして実行します。
./telnet.exp > output.html