Kann cURL Anfragen an Sockets senden?

75

Ich habe einen HTTP-Server unter /var/run/my-server.sockund möchte ihn testen, indem ich eine einfache Anfrage mit cURL sende. Kann das mit cURL gemacht werden? Kann das überhaupt gemacht werden oder muss ein Reverse-Proxy vorhanden sein?

Ich stelle mir so etwas vor:

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

Antworten:

107

Das Feature wurde in Curl hinzugefügt 7.40.

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

Ein anderes Beispiel:

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

Welches spezifiziert das GETexplizit (anstatt angenommen). Und puffert nicht (für tail -fEchtzeit-Update).

(Die erste Ubuntu-Veröffentlichung, die mit Curl 7.40 oder neuer ausgeliefert wurde, war 15.10.)

Ab cURL 7.50 muss eine gültige URL angegeben werden , einschließlich eines Hostnamens. Um die obigen Beispiele mit cURL 7.50 auszuführen, muss ein "Dummy" -Hostname hinzugefügt werden. Beispiel:

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

und

curl --no-buffer -XGET --unix-socket /docker.sock http://localhost/events
Dreamcat4
quelle
1
Das ist fantastisch!
Hubro
Und in diesem Beispiel sehe ich schließlich genau die Steckdose, in die ich gehen wollte curl. Es lebe Docker!
Spaceriver
Übrigens sind die Netcat- und Socat-Beispiele nicht mehr oben :]
Hubro
Das ist wirklich nützlich. Ich versuche dies curl --no-buffer -XGET --unix-socket tcp://192.168.99.102:2376 http://eventsjedoch, aber curl kann keine Verbindung zum Server herstellen. Ich versuchte , den Rubin Docker - Bibliothek und es schließt fein mit diesem
user1513388
1
@ user1513388 Ich bin mir ziemlich sicher, dass Sie den Pfad zu einem Socket als Argument angeben müssen --unix-socket, nicht einen URI.
Hubro
8

Ich bin mir nicht sicher, aber wie folgt:

es scheint nicht der Fall zu sein.

Dazu:

Es scheint so, als ob socat oder nc es schaffen könnten.

# 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

Hab ich auch nicht selbst ausprobiert.

Dauerregen
quelle
4
Es funktioniert mit der Ausnahme, dass Sie \r\n\r\nam Ende nicht\r\n echo -e "GET / HTTP/1.1\r\n\r\n"
TheRusskiy