如何使用现有的tcp连接从bash脚本访问http服务器?

在bash shell素文字,我用几个命令行工具(wgetcurlhttpie)来测试我的HTTP服务器。

当使用例如curl调用GET请求时,我发现在HTTP通信完成后,将打开一个TCP连接到我的服务器并立即关闭。

$ curl http://10.5.1.1/favicon.ico -o /dev/null 

为了更好地测试服务器的保持活动状态,我希望在多个http请求/响应周期中保持tcp连接的打开状态。

我可以直接从bash执行不良的http请求,如下所示:

exec 3<>/dev/tcp/10.5.1.1/80
printf "GET /\r\n\r\n" >&3
while IFS= read -r -u3 -t2 line || [[ -n "$line" ]]; do echo "$line"; done
exec 3>&-
exec 3<&-

但是,由于我的测试通信要复杂得多(包括身份验证等),所以我不想自己用bash或其他脚本语言完全编写代码,而是想使用现有工具。现在的想法是先在bash中打开一个tcp套接字,然后强制某些命令行工具使用此连接,而不是打开自己的套接字。也许是这样;

exec 3<>/dev/tcp/10.5.1.1/80
curl http://10.5.1.1/message.txt --use-existing-socket-fd=3
# ... do some other testing stuff ...
wget http://10.5.1.1/message.txt --use-existing-socket-fd=3
# ... do some other testing stuff ...
http http://10.5.1.1/message.txt --use-existing-socket-fd=3
exec 3>&-
exec 3<&-

使用上述工具或其他工具是否有可能?

希恩

您正在寻找的工具是socat由于您正在测试一台Web服务器,因此您可以要求它与该服务器建立永久连接(只要它没有选择关闭它-相应地调整超时),一旦完成,您就可以使用连接作为隧道。以下是完成此操作的两种方法。

通过Unix套接字查询

curl有一个--unix-socket允许您通过Unix套接字发送HTTP请求和接收HTTP答复选项(谢谢您的宝贵意见,谢谢)

您可以这样使用它:

socat TCP:10.5.1.1:80 UNIX-LISTEN:/tmp/curl.sock,fork

然后,在另一个终端上:

curl --unix-socket /tmp/curl.sock http://10.5.1.1/message1.txt
curl --unix-socket /tmp/curl.sock http://10.5.1.1/message2.txt
...

通过伪HTTP代理查询

您也可以提供一个伪代理通过你的隧道wgetcurl......将连接。该解决方案具有不受限于的优点curl

这次,socat侦听本地TCP端口(例如3128):

socat TCP:10.5.1.1:80 TCP-LISTEN:3128,fork,reuseaddr

然后,在另一个终端上:

export http_proxy='http://localhost:3128'
curl http://10.5.1.1/message.txt
wget http://10.5.1.1/message.txt
....

请注意,由于HTTP客户端正在使用代理,因此HTTP请求将稍作更改,这可能是不希望的。

当然,这两种解决方案都不打算与多个HTTP服务器一起使用,因为这是位于接收所有请求的通道末尾的Web服务器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何启动新的 http 服务器或将现有的服务器用于 pprof?

如何使用Java连接到现有的Kubernetes服务器并列出所有Pod?

如何将 Xcode 项目连接到现有的 MsSql 服务器

我需要使用go lang连接到现有的websocket服务器

使用 xrdp 隧道连接到现有的 X 服务器

如何使用现有的 jenkins 服务器配置 Docker?

使用现有的厨师服务器配置厨师零服务器

如何将现有的 nodejs 服务器应用程序连接到 Azure SQL 数据库

连接到现有的Kafka代理时,ksqlDB服务器无法启动

当有人连接到ssh服务器时如何执行bash脚本(freebsd)

通过SSH连接到没有运行SSH服务器的计算机,或者如何重用现有的ssh连接反向

如何在现有的石墨服务器上使用石棉写入时间序列数据?

无法使用Xpra托管服务器,仅连接到现有服务器

使用带有无服务器架构在AWS现有的API密钥

列出现有的服务器场

如何在现有的TCP连接上运行ssh

如何在现有的COM服务器上注册.NET程序集?

如何注册其他服务器上现有的 Clearcase 视图

如何在现有的Rails服务器之上添加API层

如何在服务器上现有的图像阵列中添加图像?Xcode

如何将现有的SSRS设置迁移到新服务器?

如何在数据流脚本组件中访问现有的ADO.NET连接管理器

如何使用bash脚本退出Django开发服务器?

如何使用apache从Web服务器运行bash脚本?

将现有的节点服务器与Angular Universal服务器代码合并

如何使用现有的 jmeter 脚本创建 jmeter 脚本

如何连接到现有的Jupyter Notebook内核并使用变量浏览器检查变量?

使用现有的mongodb作为MONGO_URL时,如何可靠地将数据从Meteor服务器集合拉到客户端集合?

雷鸟:如何编辑现有帐户的服务器连接设置?