使用/ dev / tcp而不是wget

为什么这个工作:

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

这失败了:

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

有没有一种方法可以使用wget,curl或其他库单行执行?

第二个片段失败,因为它打开两个单独的TCP套接字。 echo连接到www.google.com并写入HTTP请求; 然后第二行打开另一个连接并尝试从该套接字读取。 因为Google正在等待HTTP请求被发送,所以第二个套接字被阻塞。

不是我的专业领域,但我认为第二个样本将打开第二个连接,而第一个样本保持对同一连接的打开的句柄。 所以任何涉及只打开一个连接的解决方案都应该工作。