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

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

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

我正在想象这样的事情:

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

答案1

该功能已添加到 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

答案2

不确定,但根据这张票:

但似乎并非如此。

根据此:

似乎 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

我自己也没有尝试过。

相关内容