Con el comando telnet docs.python.org 80
, puedo hacer una solicitud HTTP manual para http://docs.python.org/2/license.html
, escribiendo la solicitud real.
Ahora, en lugar de escribirlo en vivo, me gustaría alimentar la solicitud desde un archivo de texto.
Intenté esto:
cat request.txt|telnet docs.python.org 80
request.txt :
GET /2/license.html HTTP/1.1
Host: docs.python.org
(¡Tiene que terminar el archivo con una línea en blanco o recibirá una solicitud incorrecta!)
Pero la conexión al servidor se cierra de inmediato.
¿Cómo debo adecuadamente tubería Request.txt a telnet docs.python.org 80
?
editar:
Es bueno saberlo; si usa en HEAD
lugar de GET
, obtendrá la misma respuesta que si hiciera una GET
solicitud, excepto el cuerpo del mensaje.
Por lo tanto, úselo HEAD
si solo desea examinar los encabezados HTTP. (es decir, para que el contenido de la respuesta no desordene la salida de su shell).
GET
que ha publicado, recibo un408 Request Time-out
error. Además, ¿wget http://docs.python.org/2/license.html
no es una opción?telnet docs.python.org 80
, por lo que tendrá que darse prisa y escribir esas dos líneas (copiar y pegar si es necesario) en unos segundos o el servidor devolverá un error de tiempo de espera.telnet docs.python.org 80
<ENTER>
GET /2/license.html HTTP/1.1
<ENTER>
Host: docs.python.org
<ENTER>
<ENTER>
<ENTER>
una segunda vez al final es porque el protocolo HTTP requiere una línea vacía adicional después de los encabezados de solicitud. Consulte la sección de mensaje de solicitud del artículo wiki de HTTPtelnet < request.txt
pero no puedo hacer que elGET
comando funcione.Respuestas:
Use netcat (comando nc) en lugar de "telnet", entonces
Telnet es un hack rápido y fácil, pero netcat es, aparentemente, la herramienta correcta para el trabajo.
fuente
Realmente no tengo ninguna experiencia,
telnet
pero toma la entrada de la redirección de archivos:Puedo hacer que se conecte correctamente al servidor de la siguiente manera:
Quizás puedas descubrir cómo hacer que acepte el
GET
comando, pero no pude. Una alternativa es usar unexpect
script:Luego puede guardar el script como
telnet.exp
, hacerlo ejecutable y ejecutarlo:fuente
expect
! Elegí la respuesta de David porque es la mejor solución para este caso. No veo ninguna diferencia de uso entre netcap y telnet para lo que quería lograr. Sin embargo, gracias por el esfuerzo, Terdon, si pudiera votar más tu respuesta, lo haría.nc
es la mejor solución, debe aceptarlo.interact
es la forma correcta de finalizar eseexpect
script.interact
"le da el control del proceso actual al usuario, de modo que las pulsaciones de teclas se envían al proceso actual y se devuelven stdout y stderr del proceso actual" (eso es deman expect
). Entonces,interact
es la manera de darle al usuario una forma de usar realmente la conexión telnet.telnet
lugar de interactuar con él, creo que debería terminar conclose -i $spawn_id
algo así. Entonces el script saldrá. Coninteract
realmente no pude salirtelnet
en absoluto, y tuve que cerrar mi terminal. Bastante miserable (aunque puede haber sido parcialmente mi culpa.)