基本上我有一个打开套接字的应用程序。
e.g。
int socket = socket(PF_LOCAL, SOCK_STREAM, 0);
现在我想向该套接字发送HTTP put请求。我知道我应该使用libcurl,但我无法让它正常工作。所以我想要一种方法将curl连接到我的应用程序。
可能像??
curl -X PUT -d @myXmlFile.xml /var/run/myunixsocket
除了使用libcurl之外没有办法吗???我无法让它工作或找到它实际写入套接字而不是URI的示例。
不用说,HTTP服务器正在侦听该套接字的另一端。
答案 0 :(得分:3)
您可以在cURL 7.40中使用UNIX套接字并添加新的--unix-socket
选项:
curl -X PUT -d @myXmlFile.xml --unix-socket /var/run/myunixsocket
在幕后,它将使用libcurl的CURLOPT_UNIX_SOCKET_PATH
选项。如果您想知道如何使用libcurl进行编程,请使用--libcurl
选项:
curl --unix-socket /var/run/myunixsocket http://localhost/ --libcurl example.c
生成的文件example.c
如下所示:
#include <curl/curl.h>
int main(int argc, char *argv[]) {
CURLcode ret;
CURL *hnd;
hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_URL, "http://host/path");
curl_easy_setopt(hnd, CURLOPT_UNIX_SOCKET_PATH, "/var/run/myunixsocket");
ret = curl_easy_perform(hnd);
curl_easy_cleanup(hnd);
hnd = NULL;
return (int)ret;
}
答案 1 :(得分:2)
您可以快速设置ncat
代理。
# forward incoming 2375/tcp to unix socket
$ ncat -vlk 2375 -c 'ncat -U /var/run/docker.sock'
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Listening on :::2375
Ncat: Listening on 0.0.0.0:2375
Ncat: Connection from 127.0.0.1.
Ncat: Connection from 127.0.0.1:55539.
# make a tcp request
$ curl http://localhost:2375/images/json
...
答案 2 :(得分:1)
我尝试使用除AF_INET(6)之外的AF_的curl源,并且发现只有几个对AF_UNIX的引用,这些引用位于libcurl部分并且主要是技术性的,假设有人“else”填充了sockaddr结构。我担心没有办法让curl可执行文件直接执行此操作。
您的应用程序中是否禁止或不希望侦听TCP套接字(作为替代方案,可能)?如果没有,但你并不反对在你的机器上听一个(当然有正确的访问控制),你可以创建一个简单的隧道到AF_LOCAL ...我知道这是一个可怕的解决方法,但它会工作,在至少
答案 3 :(得分:0)
我认为你的问题是curl不知道如何与unix域套接字通信 - 它需要一个tcp套接字。