cURL可以将请求发送到套接字吗?


75

我有一个运行在的HTTP服务器/var/run/my-server.sock,我想通过使用cURL发送一个简单请求来对其进行测试。可以使用cURL完成吗?可以做到吗,还是必须有一个反向代理?

我在想像这样的事情:

curl socket:/var/run/my-server.sock:/test/path

Answers:


107

该功能已添加到curl中7.40

curl --unix-socket /var/run/docker.sock http:/images/json

另一个例子:

curl --no-buffer -XGET --unix-socket /docker.sock http:/events

GET明确指定(而不是假设)。并且不会缓冲(用于tail -f实时更新)。

(curl 7.40或更高版本发布的第一个Ubuntu版本是15.10)。

cURL 7.50及更高版本需要提供一个有效的URL(包括主机名),因此要使用cURL 7.50运行上述示例,必须添加“虚拟”主机名,例如:

curl --unix-socket /var/run/docker.sock http://localhost/images/json

curl --no-buffer -XGET --unix-socket /docker.sock http://localhost/events

1
这太棒了!
Hubro 2015年

在此示例中,我curl毕竟看到了要插入的插槽。Docker万岁!
spacediver

顺便说一句,netcat和socat的示例不再在上面:]
Hubro,2015年

这真的很有用。但是,我正在尝试执行此操作,curl --no-buffer -XGET --unix-socket tcp://192.168.99.102:2376 http://events但是curl无法连接到服务器。我尝试使用ruby
docker

1
@ user1513388我很确定您必须提供套接字的路径作为的参数--unix-socket,而不是URI。
哈博

8

不确定,但根据此票证:

似乎并非如此。

根据此:

似乎socat或nc可以做到,请从上面的代码剪掉:

# Socat version
echo -e "GET /images/json HTTP/1.1\r\n" | socat unix-connect:/var/run/docker.sock STDIO

# nc version (netcat-freebsd)
echo -e "GET /images/json HTTP/1.0\r\n" | nc -U /var/run/docker.sock

我自己都没有尝试过。


4
它的工作原理是您可以\r\n\r\n在结尾处提供,而不是提供\r\n echo -e "GET / HTTP/1.1\r\n\r\n"
TheRusskiy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.