2010-05-04 8 views
6

Pourquoi ce travail:Utiliser/dev/tcp au lieu de wget

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

Et cela Fail:

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

Est-il possible de le faire dans une ligne w/o en utilisant wget , boucle, ou une autre bibliothèque?

+0

Attention, l'utilisation de l'approche '/ dev/tcp' au lieu de wget ou curl signifie que vous n'aurez pas toutes les fonctionnalités de wget ou curl - comme la gestion automatique des redirections 302, du serveur proxy, etc. –

Répondre

8

Le deuxième extrait échoue car il ouvre deux sockets TCP distinctes. Le echo se connecte à www.google.com et écrit la requête HTTP; puis la deuxième ligne ouvre une autre connexion et essaie de lire à partir de cette socket. La seconde socket bloque simplement parce que Google attend l'envoi de la requête HTTP.

+0

pour le faire fonctionner sur une ligne? – User1

+1

J'ai essayé pendant 20 minutes, je ne pouvais pas le faire. Il h. Vous pouvez combiner les trois instructions en une avec '&&' si cela compte comme une ligne: 'exec ... && echo ... && cat ...' –

1

Ce n'est pas mon domaine d'expertise, mais je pense que le deuxième échantillon ouvrira une deuxième connexion, tandis que le premier échantillon conservera une poignée ouverte pour la même connexion. Donc, toute solution qui implique l'ouverture d'une seule connexion devrait fonctionner.