क्या CURL सॉकेट के लिए अनुरोध भेज सकता है?


75

मेरे पास एक HTTP सर्वर चल रहा है /var/run/my-server.sock, और मैं इसे CURL का उपयोग करके एक सरल अनुरोध भेजकर परीक्षण करना चाहता हूं। क्या यह cURL का उपयोग करके किया जा सकता है? क्या यह बिल्कुल भी किया जा सकता है, या जगह में रिवर्स प्रॉक्सी होना चाहिए?

मैं कुछ इस तरह की कल्पना कर रहा हूँ:

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रियलटाइम अपडेट के लिए) नहीं होगा ।

(कर्ल के साथ जहाज करने के लिए पहली उबंटू रिलीज़ 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
यह कमाल का है!
हब्रो

और इस उदाहरण में मुझे लगता है कि मैं जिस सॉकेट में जा रहा था वह curlसब के बाद था । लंबे समय तक जीवित रहने वाले डॉकर!
स्पेसर


यह वास्तव में उपयोगी है। हालाँकि, मैं यह करने की कोशिश कर रहा हूँ, curl --no-buffer -XGET --unix-socket tcp://192.168.99.102:2376 http://eventsलेकिन कर्ल सर्वर से कनेक्ट नहीं हो सकता। मैंने रूबी डॉक लाइब्रेरी का उपयोग करने की कोशिश की और यह ठीक से जोड़ता है
user1513388

1
@ user1513388 मुझे पूरा यकीन है कि आपको --unix-socketयूआरआई नहीं, बल्कि तर्क के रूप में एक सॉकेट का मार्ग प्रदान करना होगा ।
हबरो

8

निश्चित नहीं है, लेकिन इस टिकट के अनुसार:

यह मामला प्रतीत नहीं होता है।

इसके अनुसार:

ऐसा लगता है जैसे सोकेट या एनसी यह कर सकता है, उपरोक्त स्निप से छींक:

# 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.