Почему делает эту работу:
exec 3<>/dev/tcp/www.google.com/80 echo -e "GET / HTTP/1.1\n\n">&3 cat <&3
И этот сбой:
echo -e "GET / HTTP/1.1\n\n" > /dev/tcp/www.google.com/80 cat </dev/tcp/www.google.com/80
Существует ли способ сделать это в коротком w/o, использующем wget, завихрении или некоторой другой библиотеке?
Второй фрагмент не работает, потому что он открывает два отдельных TCP-сокета. echo
соединяется с www.google.com
и пишет HTTP-запрос; а затем вторая строка открывает другое соединение и пытается прочитать из этого сокета. Второй сокет просто блокируется, потому что Google ждет отправки HTTP-запроса.
Это не моя компетенция, но я думаю, что второй пример открывает второе соединение, в то время как первый пример сохраняет открытый хэндл того же соединения. Поэтому любое решение, включающее открытие только одного соединения, должно работать.