कैसे एक 'और' चरित्र को बैश कर्ल कथन में शामिल करें


97

मैं वेब पेज डाउनलोड करने के लिए बैश में कर्ल का उपयोग करने की कोशिश कर रहा हूं, लेकिन &URL में प्रतीक को एक चरित्र के रूप में व्याख्या नहीं की गई है जैसा कि मैं चाहूंगा। किसी भी विचार पर कि मैं कैसे विश्वास दिला सकता हूं कि प्रतीक &सिर्फ एक उबाऊ चरित्र है और कुछ खास नहीं है?


निम्नलिखित विषय पर एक नज़र डालें, इससे आपको मदद करनी चाहिए - stackoverflow.com/questions/2067969/…
morgents

मैं जगह की कोशिश की है &के साथ प्रतीक \&, '&', "&", ^&लेकिन नहीं सही ढंग से मूल्यांकन करने के लिए URL प्राप्त करने में सक्षम है। वास्तव में, '&'काम करता है जब मैं Terminal.app से कर्ल कमांड चलाता हूं, लेकिन विफल होने पर मैं इसे बैश स्क्रिप्ट में रखता हूं, इसे लूप में लपेटता हूं और इसे चलाता हूं।
Chernoff

जवाबों:


121

दोहरे उद्धरण चिह्नों के अंदर पूरे URL को डालते हुए अपनी समस्या का ध्यान रखना चाहिए।


9
एकल उद्धरण बेहतर हो सकते हैं, जब तक कि चर को हल करने की आवश्यकता न हो।
शाम

जब मैं पूरे URL के उद्धरणों का उपयोग करता हूं, तो अभिव्यक्ति ${i}मान वापस नहीं करता है।
Chernoff

2
मेरे मामले में, डबल कोट्स फेल हुए जबकि सिंगल कोट्स ने ठीक काम किया।
अबेबोपारेबोप

3
कृपया उद्धरण चिह्नों को टाइप करने के लिए किस प्रोग्राम का उपयोग किया जाता है, सावधानी बरतें। शेल स्क्रिप्ट को संपादित करने की जल्दी में, मैंने एक टेक्स्ट एडिटिंग प्रोग्राम का उपयोग किया। इसने स्ट्रेट डबल कोट्स की बजाय स्लॉन्टेड कोट्स लगाए। यह वास्तव में स्क्रिप्ट को गड़बड़ कर देता है और समस्या को ढूंढना मुश्किल बना देता है!
डेविड

39
curl "http://www.example.com?m=method&args=1"

क्या आप GET URL के लिए & के परिसीमन के रूप में उपयोग कर रहे हैं? या डेटा के एक टुकड़े में है?

यदि यह डेटा में है, तो आपको इसे HTML चरित्र में एन्कोड करना होगा, यदि नहीं, तो उद्धरण के साथ घेरें।

URL में एन्कोडिंग &बन जाना चाहिए %26

curl "http://www.example.com?m=this%26that

मैं &प्रतीक को डेटा के एक टुकड़े के रूप में उपयोग कर रहा हूं , लगभग जैसा आपने दिखाया है। पकड़ यह है कि, संख्यात्मक मूल्यों के बजाय मैं उपयोग कर रहा हूं ${i}। इसलिए मैं http://www.example.com?m=method&args=${i}एक URL के रूप में मूल्यांकन करना चाहता हूं ।
Chernoff

3
जिस तरह से मैंने सिर्फ URL दिखाया वह GET वेरिएबल्स के लिए एक परिधि के रूप में '&' का उपयोग करता है, इसलिए अब मैं भ्रमित हूं, $ [i] में आपके पास डेटा का एक टुकड़ा है जिसमें '&' है? अगर ऐसा है तो आपको URL को एनकोड करना होगा। & =% 26
मैट क्लार्क

1
खोजा गया संपूर्ण इंटरनेट समाधान नहीं ढूंढ सका। @MattClark आप नायक हैं। मैं सिर्फ एन्कोड किया गया और जो डेटा का एक टुकड़ा था और मेरी स्क्रिप्ट ठीक काम कर रही है।
हरिस उर रहमान

1
क्या दूसरा कोड स्निपेट के अंत में गायब है?
डेविड

23

&प्रतीक के चारों ओर एकल उद्धरण डालना काम करने लगता है। यही है, यूआरएल की तरह http://www.example.com/page.asp?arg1=${i}'&'arg2=${j}कर्ल के साथ अनुरोधित वेबपेज को वापस करता है।


2
आपको प्रश्न पर तर्क की आवश्यकता को शामिल करना चाहिए ताकि यह भविष्य के विचारों के लिए स्पष्ट हो।
मैनटैक्स

यह उत्तर क्यों दिया गया है? इस उत्तर acceped किया जाना चाहिए stackoverflow.com/a/13339492/2898694
Sharikov व्लादिस्लाव

13

भागने के "और" वर्णों की कोशिश करने के बजाय, आप नीचे दिए गए अनुसार -d पैरामीटर के साथ POST अनुरोधों में http url पैरामीटर निर्दिष्ट कर सकते हैं:

curl -X POST http://www.example.com \
-d arg1=this \
-d arg2=that

यदि अनुरोध GET है, तो आपको -G विकल्प भी जोड़ना चाहिए, जो कर्ल को GET अनुरोध के साथ डेटा भेजने के लिए कहता है।

curl -X GET -G http://www.example.com \
-d arg1=this \
-d arg2=that

यह सबसे अच्छा जवाब है! धन्यवाद!
प्रकोप'

इसने मेरे लिए काम किया। दोहरे उद्धरण जोड़ने से काम नहीं चला।
जुहोग १६'१

9

आप %26इसके बजाय उपयोग कर सकते हैं &। इकाई कोड ठीक काम करेगा।


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