कर्ल कमांड में url को एनकोड करने का कोई तरीका?


106

मेरे पास कुछ url हैं, जिसमें क्वेरी param में जगह है। मैं इसे कर्ल में उपयोग करना चाहता हूं, जैसे

curl -G "http://localhost:30001/data?zip=47401&utc_begin=2013-8-1 00:00:00&utc_end=2013-8-2 00:00:00&country_code=USA"

जो देता है

Malformed Request-Line

मेरी समझ के अनुसार o / p क्वेरी परम में मौजूद स्थान के कारण है।

क्या कर्ल कमांड प्रदान करने से पहले url को स्वचालित रूप से एनकोड करने के लिए कोई दूर है?

जवाबों:


170

curlआंतरिक रूप से url- एन्कोडिंग का समर्थन करता है --data-urlencode:

$ curl -G -v "http://localhost:30001/data" --data-urlencode "msg=hello world" --data-urlencode "msg2=hello world2"

-G डेटा को URL में जोड़ना भी आवश्यक है।

ट्रेस हेडर

> GET /data?msg=hello%20world&msg2=hello%20world2 HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu)
> Host: localhost
> Accept: */*

क्या होगा अगर msg = '='?
औरेलिन ओम्स

कर्ल डॉक से: ध्यान दें कि नाम वाला भाग (इस मामले में msg) पहले से ही URL-एन्कोडेड होने की उम्मीद है। इसके अलावा, आप --request DELETE जैसे कुछ निर्दिष्ट कर सकते हैं और यह वास्तव में GET के बजाय एक डिलीट विधि होगी। यकीन नहीं होता अगर आदेश मायने रखता है।
फेडेरिको

@damphat क्या होता है जब अनुरोध में दो पैरामीटर होते हैं "msg1=Hello&msg2=World"? यह &उन मापदंडों के बीच सांकेतिक शब्दों में बदलना होगा जो सर्वर पर भेजने के लिए गलत चीज का मतलब होगा
गणेश सतपुत

10
@ गणेशस्पुटु: --data-urlencodeप्रत्येक कुंजी-मान जोड़ी के लिए एक से अधिक मापदंडों का उपयोग करें ।
मार्टिज़न पीटर

@MartijnPieters हां। यह काम करता है। उत्तर के लिए धन्यवाद
गणेश सतपुते

7
 curl -G "$( echo "$URL" | sed 's/ /%20/g' )"

आप कहां $URLसे अनुवाद करना चाहते हैं, यह यूआरएल कहां है।

एक URL में आपके एक से अधिक प्रकार के अनुवाद (एन्कोडिंग) हो सकते हैं, इसलिए आप ऐसा करना चाहते हैं:

curl -G "$(perl -MURI::Escape -e 'print uri_escape shift, , q{^A-Za-z0-9\-._~/:}' -- "$URL")"

बजाय।


1
ध्यान दें कि echo "$URL" | sed 's/ /%20/'यदि %URL में वर्ण हैं तो सही काम नहीं करेंगे । इसके अलावा, रिक्त स्थान आम तौर पर +(और के +रूप में %2b) एन्कोडेड होते हैं । मैं पर्ल समाधान की सिफारिश करता हूं, जो विश्वसनीय है।
गिल्स

1
sed 's/ /%20/g'यदि आपके पास अनुवाद करने के लिए एक से अधिक स्थान हैं ...
sebthebert

नोट मुझे Perl URI :: एस्केप मॉड्यूल स्थापित करना था।
buzz3791
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.