Bash Shell脚本-强制在curl、nc或telnet中使用HTTP 1.1管道

Bash Shell脚本-强制在curl、nc或telnet中使用HTTP 1.1管道,bash,http,curl,telnet,netcat,Bash,Http,Curl,Telnet,Netcat,我需要在bash脚本上使用curl、telnet或netcat对服务器GET请求强制执行HTTP管道(1.1)。我已经尝试过使用curl来实现这一点,但是该工具从7.65.0版开始就放弃了对HTTP管道的支持,我找不到关于如何实现这一点的更多信息。不过,如果无法使用telnet或netcat,我可以在其他计算机上访问curl 7.29.0版。来自维基百科: HTTP管道是一种技术,其中在单个TCP(传输控制协议)连接上发送多个HTTP请求,而无需等待相应的响应 要使用netcat发送多个GET请

我需要在bash脚本上使用curl、telnet或netcat对服务器GET请求强制执行HTTP管道(1.1)。我已经尝试过使用curl来实现这一点,但是该工具从7.65.0版开始就放弃了对HTTP管道的支持,我找不到关于如何实现这一点的更多信息。不过,如果无法使用telnet或netcat,我可以在其他计算机上访问curl 7.29.0版。

来自维基百科:

HTTP管道是一种技术,其中在单个TCP(传输控制协议)连接上发送多个HTTP请求,而无需等待相应的响应

要使用netcat发送多个GET请求,类似这样的操作应该可以做到:

echo-en“GET/index.html HTTP/1.1\r\nHost:example.com\r\n\r\nGET/other.html HTTP/1.1\r\nHost:example.com\r\n\r\n”| nc example.com 80
这将向example.com发送两个HTTP GET请求,一个用于,另一个用于

-e标志表示解释转义序列(回车和换行,或\r和\n)。-n表示不在末尾打印换行符(如果没有-n,它可能会工作)

我刚刚运行了上面的命令,从中得到了两个响应,一个是200 OK,另一个是404 Not Found

如果执行HEAD请求而不是GET请求,则可能更容易看到多个请求和响应。这样,example.com的服务器将只响应标题

echo-en“HEAD/index.html HTTP/1.1\r\nHost:example.com\r\n\r\nHEAD/other.html HTTP/1.1\r\nHost:example.com\r\n\r\n”| nc example.com 80
这是我从上述命令获得的输出:

$ echo -en "HEAD /index.html HTTP/1.1\r\nHost: example.com\r\n\r\nHEAD /other.html HTTP/1.1\r\nHost: example.com\r\n\r\n" | nc example.com 80
HTTP/1.1 200 OK
Content-Encoding: gzip
Accept-Ranges: bytes
Age: 355429
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Mon, 24 Feb 2020 14:48:39 GMT
Etag: "3147526947"
Expires: Mon, 02 Mar 2020 14:48:39 GMT
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Server: ECS (dna/63B3)
X-Cache: HIT
Content-Length: 648

HTTP/1.1 404 Not Found
Accept-Ranges: bytes
Age: 162256
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Mon, 24 Feb 2020 14:48:39 GMT
Expires: Mon, 02 Mar 2020 14:48:39 GMT
Last-Modified: Sat, 22 Feb 2020 17:44:23 GMT
Server: ECS (dna/63AD)
X-Cache: 404-HIT
Content-Length: 1256

如果要查看更多详细信息,请在运行时运行这些命令之一。请求以第7号(突出显示)发送,第11号和第13号收到两个响应

谢谢你的回答!我想你错过了echo命令末尾的doble引语。有没有办法检查请求是否已通过管道成功发送?不客气!谢谢你抓住错过的报价。我将编辑我的答案,因为它可能太长,无法在评论中发表。它成功了!非常感谢您的帮助:)我会将您的asnwer标记为有用且正确!