CURL, soketlere istek gönderebilir mi?


75

Çalışan bir HTTP sunucum var /var/run/my-server.sockve cURL kullanarak basit bir istek göndererek test etmek istiyorum. CURL kullanılarak yapılabilir mi? Hiç yapılabilir mi, yoksa ters bir vekil var mı?

Bunun gibi bir şey hayal ediyorum:

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

Yanıtlar:


107

Özellik kıvrık olarak eklendi 7.40.

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

Başka bir örnek:

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

Bu GETaçıkça belirtir (varsayılmak yerine). Ve tampon ( tail -fgerçek zamanlı güncelleme için).

(7.40 veya daha yeni kıvrımlarla gönderilecek ilk Ubuntu sürümü 15.10 idi).

cURL 7.50 ve üstü , bir ana bilgisayar adı da dahil olmak üzere geçerli bir URL sağlanmasını gerektirir ; bu nedenle yukarıdaki örnekleri cURL 7.50 ile çalıştırmak için, örneğin "sahte" bir ana bilgisayar adı eklenmelidir:

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

ve

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

1
Bu harika!
Hubro

Ve bu örnekte curl, sonuçta içine gireceğim soketi görüyorum . Çok yaşa Docker!
spacediver,

Bu arada, netcat ve socat örnekleri artık yukarıda değil :]
Hubro

Bu gerçekten kullanışlıdır. Ancak, bunu yapmaya çalışıyorum curl --no-buffer -XGET --unix-socket tcp://192.168.99.102:2376 http://eventsama curl sunucuya bağlanamıyor. Yakut liman işçisi kütüphanesini kullanmayı denedim ve bunu kullanarak gayet iyi bağlanıyor
user1513388

1
@ user1513388 Bir URI'ye --unix-socketdeğil , argüman olarak bir sokete yol sağlamak zorunda olduğunuzdan eminim .
Hubro

8

Emin değilim, ancak bu bilete göre:

durum böyle görünmüyor.

Buna göre:

socat veya nc'nin yapabileceği gibi gözüküyor, yukarıdaki snip'ten koparın:

# 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

Ben de kendim denemedim.


4
\r\n\r\nsonunda sağlayabileceğiniz bir istisna ile çalışır , değil\r\n echo -e "GET / HTTP/1.1\r\n\r\n"
TheRusskiy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.