2010-05-04 12 views
6

Por qué funciona esto:El uso de/dev/tcp en lugar de wget

 
exec 3<>/dev/tcp/www.google.com/80 
echo -e "GET/HTTP/1.1\n\n">&3 
cat <&3 

Y esto falla:

 
echo -e "GET/HTTP/1.1\n\n" > /dev/tcp/www.google.com/80 
cat </dev/tcp/www.google.com/80 

¿Hay una manera de hacerlo en una línea w/o usando wget , curl, o alguna otra biblioteca?

+0

Tenga en cuenta que usar ese enfoque '/ dev/tcp' en lugar de wget o curl significa que no obtendrá toda la funcionalidad de wget o curl, como manejar automáticamente 302 redirecciones, soporte de servidor proxy, etc. –

Respuesta

8

El segundo fragmento falla porque abre dos sockets TCP separados. El echo se conecta al www.google.com y escribe la solicitud HTTP; y luego la segunda línea abre otra conexión e intenta leer desde ese socket. El segundo socket simplemente se bloquea porque Google está esperando que se envíe la solicitud HTTP.

+0

alguna idea sobre cómo para hacerlo funcionar en una línea? – User1

+1

Lo intenté durante 20 minutos, no pude hacerlo. Je. Podría combinar las tres declaraciones en una con '&&' si eso cuenta como una línea: 'exec ... && echo ... && cat ...' –

1

No es mi área de especialización, pero creo que la segunda muestra se abrirá una segunda conexión, mientras que la primera muestra mantiene un identificador abierto a la misma conexión. Entonces, cualquier solución que implique abrir una sola conexión debería funcionar.