CURL สามารถส่งคำขอไปยังซ็อกเก็ตได้หรือไม่?


75

ฉันมีเซิร์ฟเวอร์ HTTP ทำงานอยู่/var/run/my-server.sockและฉันต้องการทดสอบโดยส่งคำของ่ายๆโดยใช้ cURL สิ่งนี้สามารถทำได้โดยใช้ cURL? สามารถทำได้ทั้งหมดหรือจะต้องมี reverse proxy อยู่ในสถานที่?

ฉันจินตนาการถึงสิ่งนี้:

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

คำตอบ:


107

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ปรับปรุงเรียลไทม์)

(Ubuntu รุ่นแรกที่วางจำหน่ายที่มี curl 7.40 หรือใหม่กว่าคือ 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
นี่มันเจ๋งมาก!
Hubro

และในตัวอย่างนี้ฉันเห็นซ็อกเก็ตที่มากฉันจะcurlเข้าไปหลังจากทั้งหมด นักเทียบท่าสด!
spacediver

อย่างไรก็ตามตัวอย่าง netcat และ socat ไม่ได้อยู่เหนือ :]
Hubro

มันมีประโยชน์จริงๆ อย่างไรก็ตามฉันพยายามทำเช่นนี้curl --no-buffer -XGET --unix-socket tcp://192.168.99.102:2376 http://eventsแต่ขดไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ ฉันลองใช้ห้องสมุด ruby
docker

1
@ user1513388 ฉันค่อนข้างแน่ใจว่าคุณต้องระบุเส้นทางไปยังซ็อกเก็ตเป็นอาร์กิวเมนต์สำหรับ--unix-socketไม่ใช่ URI
Hubro

8

ไม่แน่ใจ แต่ตามตั๋วนี้:

ดูเหมือนจะไม่เป็นเช่นนั้น

ต่อสิ่งนี้:

ดูเหมือนว่า socat หรือ nc สามารถทำได้ snip จาก snip ด้านบน:

# 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.