कर्ल के साथ लाइन ब्रेक कैसे भेजें?


90

मैंने कर्ल के साथ लाइन ब्रेक भेजने के लिए निम्नलिखित कोशिश की है, लेकिन \nकर्ल द्वारा व्याख्या नहीं की गई है।

curl -X PUT -d "my message\n" http://localhost:8000/hello

मैं कर्ल के साथ एक लाइन ब्रेक कैसे भेज सकता हूं?


1
किस प्लेटफार्म पर? प्रासंगिक हो सकता है
पेक्का

जवाबों:


114

कभी-कभी आप डेटा को वाट्सएप पर भेजना चाहते हैं।

--data-binaryविकल्प है कि नहीं करता है।


2
यह इसे करने का सबसे अच्छा तरीका है। -d @message.txtविशेष रूप से अन्य उत्तर में सुझाए गए अनुसार उपयोग करने का विकल्प आपकी लाइन ब्रेक को बदल सकता है। --data-binary: दूसरी ओर नहीं (जो महत्वपूर्ण है कि आप बहुखण्डीय / फार्म डेटा के लिए अपनी CRLF लाइनब्रेक रखने की जरूरत है, तो है, को देखने पर stackoverflow.com/questions/10765243/... )
विलियम Denniss

8
क्योंकि यह मुझे एक सेकंड में ले गया: यदि आप एक फ़ाइल अपलोड कर रहे हैं, तो आप शायद इसके लिए एक curl -H "Content-Type:text/plain" --data-binary "$(<myfile)" http://localhost:8888
उप

दिलचस्प है, लेकिन फायदा क्या है?
स्ज़ोकस्के

8
+1, सही उत्तर। curl --data-binary @/path/to/file.txt http://example.com/target
फ्रैंक ओलशेवस्की

3
मुझे काम करने के लिए -डेटा-बाइनरी नहीं मिला, लेकिन% 0A चरित्र (@malcolmocean) उत्तर का उपयोग करने में सक्षम था। जब मैं --data- बाइनरी "ip = 33.44.55। * \ N5.6.7.8" का उपयोग करता हूं, तो इसे न्यूलाइन के रूप में नहीं माना जाता है, लेकिन --data "" ip = 33.44.55। *% 0A5.6.7.8। "के माध्यम से न्यूलाइन भेजते हैं
पॉल

51

आपका खोल गुजर रहा है \के बाद nके बजाय कर्ल करने के लिए एक के बजाय न्यू लाइन "my message\n"। बैश के पास एक और स्ट्रिंग सिंटैक्स के लिए समर्थन है जो भागने के दृश्यों का समर्थन करता है जैसे \nऔर \t। इसका उपयोग करने के लिए, स्ट्रिंग को इसके साथ शुरू करें और स्ट्रिंग को $'समाप्त करें ':

curl -X PUT -d $'my message\n' http://localhost:8000/hello

बैश संदर्भ नियमावली में ANSI-C कोटेशन देखें


1
इसने मेरे लिए भी काम किया। मुझे इसके साथ खेलना होगा, क्योंकि यह डबल-कोट्स के साथ काम नहीं करता था, जिसका अर्थ है कि मैं स्ट्रिंग के भीतर सिंगल-कोट्स का उपयोग नहीं कर सकता।
टायलर Collier

1
मुझे नहीं पता कि आपको यह विचार कहां से मिला कि यह "जावास्क्रिप्ट शेल सिंटैक्स" है। खोल my message\nशब्दशः गुजरता है, दो पलायन के साथ नहीं जैसा कि आप कहते हैं।
क्रिस डाउन

@ क्रिसडाउन, आपने मुझे गलत बताया। मैंने कहा "जावास्क्रिप्ट स्ट्रिंग सिंटैक्स", "जावास्क्रिप्ट शेल सिंटैक्स" नहीं। मैं अपने स्ट्रिंग उदाहरणों के साथ क्या मतलब है, इसके बारे में स्पष्ट होने के लिए मैं जावास्क्रिप्ट स्ट्रिंग सिंटैक्स का उपयोग कर रहा हूं। मुझे लगता है कि आप जिस चीज का जिक्र कर रहे हैं my message\nवह वही है जो मैं बता रहा हूं "my message\n"
बेंजामिन एटकिन

2
@BenAtkin क्षमा करें, फ्रायडियन पर्ची। हालाँकि, मेरा पढ़ना अभी भी सही था। \nजावास्क्रिप्ट के साथ कुछ नहीं करना है। वास्तव में यहाँ कुछ भी जावास्क्रिप्ट के साथ करने के लिए कुछ भी नहीं है।
क्रिस डाउन

मैं इसका इस्तेमाल लोगों को समझाने के लिए कर रहा हूं। और लगता है काम किया है। शेल स्ट्रिंग सिंटैक्स को व्यापक रूप से नहीं समझा जाता है। अगर होता तो यह सवाल क्यों पूछा जाता? मुझे इसे समझाने के लिए क्या करना चाहिए था?
बेंजामिन एटकिन

16

बहुत आसान तरीका है!

curl -X PUT -d $'my message\n' http://localhost:8000/hello

यह नई पंक्ति वर्ण सम्मिलित करने के लिए ANSI-C क्वोटिंग का उपयोग करेगा ।

कोई पाइपिंग नहीं, कोई डेटा फ़ाइल नहीं। CURL के साथ नई भेजना भी देखें ।


बैश सिंटैक्स
ओडिसज़ापक

यह केवल एक चीज है जो मेरे लिए सभी उत्तरों से बाहर काम करती है
बॉब कोकिस्को

15

कोई है जो फ़ाइलों का उपयोग नहीं करना चाहता है, और जादू से बचने के लिए शेल का सहारा नहीं लेना चाहता है:

curl -X POST --data-binary @- http://url.com <<EOF
line one
line two
EOF

लेकिन यह पोस्ट डेटा पेलोड में शाब्दिक नई सुर्खियां हैं, न कि फॉर्म फील्ड में।


मुझे यह समझने में परेशानी हो रही है। मुझे लगता है कि @एक फ़ाइल नाम को इंगित करना है, लेकिन क्या उपयोग करते समय कुछ विशेष अर्थ है @-? क्या <<EOFकर रहा है?
डेनिस टी

1
@-कर्ल को मानक से इनपुट का उपभोग करने के लिए कहता है, और <<EOFबैश के लिए स्ट्रीम संकेतक का अंत है। फिर हम बाद EOFमें डेटा पेलोड में मैजिक शब्द का उपयोग करते हुए बैश को बताते हैं कि हम स्ट्रीम को लिख रहे हैं।
जैमर

इसके अलावा, -जब एक फ़ाइल नाम की उम्मीद है STDIN निर्दिष्ट करने के लिए जीएनयू / लिनक्स में मानक तरीका की तरह है। यह सार्वभौमिक नहीं है, लेकिन यह बहुत आम है।
रिच रिमेर

मैनुअल से परामर्श करके हम देखते हैं कि यह सिर्फ होना चाहिए - और नहीं @ -
user3504575

8

इसी तरह का मुद्दा था। मैक से क्लाउड स्टोरेज के लिए सीएसवी फाइल अपलोड करते समय, नई लाइनों को हटाया जा रहा था। इसे डाउनलोड करने के बाद, पूरी फाइल एक ही लाइन की तरह दिखती थी। मैंने बिना किसी सफलता के अलग-अलग EOL अक्षर '\ n' '\ r' '\ r \ n' जोड़ने की कोशिश की। '-D' के बजाय '-डेटा-बाइनरी' का उपयोग करने से समस्या हल हो गई। Btw इस समस्या केवल मैक से हुई। CentOS मशीन से कॉल करते समय '-d' ने ठीक काम किया। मैक के न्यूलाइन चरित्र के कारण यह बहुत ज्यादा दिखता है। लेकिन किसी भी अधिक डिबगिंग की तरह महसूस मत करो।

आपकी सहायता के लिए धन्यवाद।

curl -X PUT -d @filename.csv https://cloudstorage -H "content-type: text/csv"

वी.एस.

curl -X PUT --data-binary @filename.csv https://cloudstorage -H "content-type: text/csv"

आपका बहुत बहुत धन्यवाद ! यह आपके मैक से संबंधित नहीं है: मैं लिनक्स पर एक ही मुद्दा था, और --data-binary @मेरे मुद्दे को हल कर रहा है (एक CalDAV सर्वर के लिए एक बहुस्तरीय .ics फ़ाइल भेजकर)।
एम-जैक

7

(मैं थोड़ा अलग प्रश्न के साथ यहाँ समाप्त हुआ, इसलिए मैं अपना उत्तर पोस्ट करने जा रहा हूँ क्योंकि यह भविष्य के खोजकर्ताओं की मदद कर सकता है)

मेरा समाधान उन लोगों पर लागू होता है जो एक क्वेरी स्ट्रिंग में प्रपत्र-शैली डेटा, अर्थात कुंजी / मान जोड़े भेज रहे हैं। एन्कोडेड लाइन ब्रेक का उपयोग करें, जो कि %0A, एन्कोडेड स्पेस कैसा है %20। अन्य प्रतीकों को परिवर्तित करने के लिए आप http://meyerweb.com/eric/tools/dencoder/ का उपयोग कर सकते हैं ।

इसलिए यदि आप messageमूल्य की कुंजी निर्धारित करना चाहते हैं :

line one
another

आप भेज देंगे

curl --data "message=line%20one%0Aanother" http://localhost:8000/hello

1
मामूली विराम (शायद टाइपो) एक लाइन ब्रेक / कैराजी रिटर्न चरित्र के लिए% AA के बजाय% 0A होना चाहिए
पॉल

3

आपके प्रश्न का उत्तर नहीं है, लेकिन मैं संदेश और लाइन विराम वाली एक अस्थायी फ़ाइल बनाकर इसके चारों ओर काम करूंगा, और उस फ़ाइल को कार्य करने के लिए कर्ल दूंगा:

curl -X PUT -d @message.txt http://localhost:8000/hello

वहाँ से मैनुअल :

यदि आप पत्र @ के साथ डेटा शुरू करते हैं, तो डेटा को पढ़ने के लिए शेष फ़ाइल नाम होना चाहिए, या - यदि आप स्टड से डेटा पढ़ने के लिए कर्ल चाहते हैं। फ़ाइल की सामग्री पहले से ही URL-एन्कोडेड होनी चाहिए। एकाधिक फ़ाइलों को भी निर्दिष्ट किया जा सकता है। 'फोब्बर' नामक फाइल से डेटा पोस्टिंग इस प्रकार किया जाएगा --डेटा @foobar।


अस्थायी फ़ाइलों का उपयोग करना एक आसान तरीका है। Szocske के उत्तर के अनुसार, डेटा वर्बटीम को भेजने के लिए --data-binaryएक अधिक वफादार विकल्प है -d
विलियम डेनिस

7
-1; अस्थायी फ़ाइल का उपयोग -d @/path/to/temp/file.txtलाइन-ब्रेक समस्या का समाधान नहीं करता है। --data-binaryकरता है, ऊपर देखें।
बजे फ्रैंक ओलशेवस्की

यदि आप यह देख रहे हैं क्योंकि आप सोच रहे हैं कि कर्ल को अपग्रेड करने या विंडोज़ 10 में अपग्रेड करने के बाद आपके कर्ल कमांड क्यों काम नहीं करते हैं, तो सुनिश्चित करें कि आप अपने फ़ाइल संदर्भ के आसपास उद्धरण जोड़ें। उदाहरण के लिए: curl -X PUT -d "@ message.txt" localhost: 8000 / हैलो मेरी मायावी खोज स्क्रिप्ट्स ने काम करना बंद कर दिया था।
joezen777

3

एक बहुत आसान तरीका है, ब्रेक के लिए कंसोल में बस शिफ्ट-एंटर करें। बहुत पठनीय टाइपिंग में भी।

curl -d "line1
line2" http-echo.com

Server gets this: line1\nline2

लाइन ब्रेक को हटाने के लिए ऐसा करें:

curl -d "line1 \
line2" http-echo.com

Server gets this: line1 line2

-2

मैं इस कोड के साथ Sendgrid का उपयोग कर रहा था (नीचे कॉपी किया गया) मूल रूप से यहां पाया गया https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html

\n\nजीमेल में काम किया, लेकिन \nनजरअंदाज कर दिया गया। मैंने भागने और अन्य सुझावों को दोगुना करने की कोशिश की। मैंने भी कोशिश की \r\nऔर वह भी जीमेल में काम नहीं किया। नोट: मैंने अन्य ईमेल ग्राहकों का परीक्षण करने की जहमत नहीं उठाई, शायद यह जीमेल-विशिष्ट समस्या थी।

    curl --request POST \
  --url https://api.sendgrid.com/v3/mail/send \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{"personalizations": [{"to": [{"email": "your.email@example.com"}]}],"from": {"email": "example@example.com"},"subject": "Hello, World!","content": [{"type": "text/plain", "value": "Heya!"}]}'

आखिरकार मैं छोड़ दिया एक समाधान की तलाश और बंद text/plainकरने के लिए text/htmlऔर सिर्फ इस्तेमाल किया <br />टैग।

किसी ने सुझाव दिया कि अगर आप ट्रैकिंग पिक्सेल सक्षम है, तो सेंडरग्रेट HTML में प्लेनटेक्स्ट को कनवर्ट करता है, जो समझ में आता है। हो सकता है कि नई प्रतियां सादे-से-HTML रूपांतरण प्रक्रिया में नष्ट हो गईं। मुझे लगता है कि ग्राहक एक ट्रैकिंग पिक्सेल चाहता है, इसलिए HTML पर स्विच करने का फैसला किया।

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