Use netcat (comando nc) ao invés de "telnet", então
cat request.txt | nc docs.python.org 80
O Telnet é um hack rápido e fácil, mas o netcat é, aparentemente, a ferramenta correta para o trabalho.
Com o comando telnet docs.python.org 80
, posso fazer uma solicitação HTTP manual para http://docs.python.org/2/license.html
, digitando a solicitação real.
Agora, em vez de digitá-lo ao vivo, eu gostaria de alimentar a solicitação de um arquivo de texto.
Eu tentei isso:
cat request.txt|telnet docs.python.org 80
request.txt :
GET /2/license.html HTTP/1.1
Host: docs.python.org
(Você precisa terminar o arquivo com uma linha em branco ou receberá um pedido incorreto!)
Mas a conexão com o servidor é fechada imediatamente.
Como devo encaminhar corretamente request.txt para telnet docs.python.org 80
?
edit:
É bom saber; Se você usar HEAD
em vez de GET
, receberá a mesma resposta de uma solicitação GET
, exceto o corpo da mensagem.
Então, use HEAD
se você quiser apenas examinar os cabeçalhos HTTP. (Ou seja, para que o conteúdo da resposta não atravesse a saída da sua shell).
Eu realmente não tenho experiência com telnet
, mas é preciso inserir o redirecionamento de arquivos:
telnet < abc.txt
Posso fazer com que ele se conecte ao servidor corretamente da seguinte forma:
$ 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.
Talvez você possa descobrir como aceitar o comando GET
, mas não consegui. Uma alternativa é usar um script 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
Você pode salvar o script como telnet.exp
, torná-lo executável e executá-lo:
./telnet.exp > output.html