cURLはリクエストをソケットに送信できますか?


75

でHTTPサーバーを実行していますが、/var/run/my-server.sockcURLを使用して簡単なリクエストを送信することでテストしたいと思います。これはcURLを使用して実行できますか?まったく実行できますか、それともリバースプロキシを配置する必要がありますか?

私はこのようなものを想像しています:

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

回答:


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
これはすごい!
ウブロ

そして、この例では、curl結局私がしようとしていたまさにそのソケットを見ています。長いライブDocker!
スペースダイバー

ちなみに、netcatとsocatの例はもう上ではありません:]
Hubro

これは本当に便利です。ただし、これを実行しようとしていますcurl --no-buffer -XGET --unix-socket tcp://192.168.99.102:2376 http://eventsが、curlはサーバーに接続できません。ruby Dockerライブラリを使用してみましたが、これを使用して
正常に

1
@ user1513388 --unix-socketURIではなく、への引数としてソケットへのパスを提供する必要があると確信しています。
ウブロ

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.