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

Hub*_*bro 97 curl sockets

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

我在想象这样的事情:

curl socket:/var/run/my-server.sock:/test/path
Run Code Online (Sandbox Code Playgroud)

Dre*_*at4 146

该功能是在 curl 中添加的7.40

curl --unix-socket /var/run/docker.sock http:/images/json
Run Code Online (Sandbox Code Playgroud)

另一个例子:

curl --no-buffer -XGET --unix-socket /docker.sock http:/events
Run Code Online (Sandbox Code Playgroud)

其中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
Run Code Online (Sandbox Code Playgroud)

curl --no-buffer -XGET --unix-socket /docker.sock http://localhost/events
Run Code Online (Sandbox Code Playgroud)

  • 在 CentOS 7 上,这甚至被向后移植到 7.29 `curl` 版本。 (2认同)

小智 10

不确定,但根据这张票:

情况似乎并非如此。

根据这个:

似乎 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
Run Code Online (Sandbox Code Playgroud)

自己也没试过。

  • 它的工作原理是你可以在最后提供 `\r\n\r\n`,而不是 `\r\n` `echo -e "GET / HTTP/1.1\r\n\r\n" ` (5认同)