CURL có thể gửi yêu cầu đến ổ cắm không?


75

Tôi có một máy chủ HTTP đang chạy /var/run/my-server.sockvà tôi muốn kiểm tra nó bằng cách gửi một yêu cầu đơn giản bằng cURL. Điều này có thể được thực hiện bằng cách sử dụng cURL? Nó có thể được thực hiện ở tất cả, hoặc phải có một proxy ngược tại chỗ?

Tôi đang tưởng tượng một cái gì đó như thế này:

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

Câu trả lời:


107

Các tính năng đã được thêm vào trong curl 7.40.

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

Một vi dụ khac:

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

Mà chỉ định GETrõ ràng (chứ không phải giả định). Và sẽ không đệm (để tail -fcập nhật theo thời gian thực).

(Bản phát hành Ubuntu đầu tiên được phát hành với độ cong 7,40 hoặc mới hơn là 15.10).

cURL 7.50 trở lên yêu cầu phải cung cấp URL hợp lệ , bao gồm tên máy chủ, vì vậy để chạy các ví dụ trên với cURL 7.50, ví dụ: tên máy chủ "giả" phải được thêm vào:

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

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

1
Điều này thật tuyệt!
Hubro

Và trong ví dụ này tôi thấy chính cái ổ cắm mà tôi sẽ đi curlvào. Docker sống lâu!
spainediver

Nhân tiện, các ví dụ netcat và socat không còn ở trên :]
Hubro

Điều này thực sự hữu ích. Tuy nhiên, tôi đang cố gắng thực hiện việc này curl --no-buffer -XGET --unix-socket tcp://192.168.99.102:2376 http://eventsnhưng curl không thể kết nối với máy chủ. Tôi đã thử sử dụng thư viện ruby ​​docker và nó kết nối tốt bằng cách sử dụng này
user1513388

1
@ user1513388 Tôi khá chắc chắn rằng bạn phải cung cấp đường dẫn đến ổ cắm làm đối số --unix-socketchứ không phải URI.
Hubro

8

Không chắc chắn, nhưng theo vé này:

nó dường như không phải là trường hợp.

Mỗi cái này:

có vẻ như socat hoặc nc có thể làm điều đó, snip từ snip trê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

Tôi đã không thử bản thân mình.


4
nó hoạt động với ngoại lệ mà bạn có thể cung cấp \r\n\r\nvào cuối, không phải\r\n echo -e "GET / HTTP/1.1\r\n\r\n"
TheRusskiy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.