कर्ल कमांड लाइन का उपयोग करके xml फ़ाइल भेजें / पोस्ट करें


388

मैं एक xml फ़ाइल को स्थानीय सर्वर पर कैसे भेज / पोस्ट कर सकता हूं http: // localhost: 8080 कमांड लाइन से कर्ल का उपयोग करके?

मुझे किस कमांड का उपयोग करना चाहिए?

जवाबों:


505

यदि यह प्रश्न आपके अन्य हडसन प्रश्नों से जुड़ा है, तो उनके द्वारा प्रदान की गई कमांड का उपयोग करें। कमांड लाइन से XML के साथ इस तरह:

$ curl -X POST -d '<run>...</run>' \
http://user:pass@myhost:myport/path/of/url

आपको फ़ाइल से पढ़ने के लिए इसे थोड़ा बदलना होगा:

 $ curl -X POST -d @myfilename http://user:pass@myhost:myport/path/of/url

मैनपेज पढ़ें । -d पैरामीटर के लिए एक सार का पालन।

-d / - डेटा

(HTTP) HTTP सर्वर के लिए POST अनुरोध में निर्दिष्ट डेटा भेजता है, उसी तरह जो एक ब्राउज़र तब करता है जब कोई उपयोगकर्ता HTML फॉर्म में भरता है और सबमिट बटन दबाता है। यह सामग्री-प्रकार एप्लिकेशन / x-www-form-urlencoded का उपयोग करके सर्वर को डेटा पास करने के लिए कर्ल का कारण होगा। तुलना करें -F / - फॉर्म।

-d / - डेटा एक ही है --data-ascii। विशुद्ध रूप से द्विआधारी डेटा पोस्ट करने के लिए, आपको --डेटा-बाइनरी विकल्प का उपयोग करना चाहिए। किसी प्रपत्र फ़ील्ड के मान को URL-एनकोड करने के लिए आप --data-urlencode का उपयोग कर सकते हैं।

यदि इनमें से कोई भी विकल्प एक ही कमांड लाइन पर एक से अधिक बार उपयोग किया जाता है, तो निर्दिष्ट डेटा टुकड़े एक अलग और -symbol के साथ एक साथ विलय कर दिए जाएंगे। इस प्रकार, '-d name = daniel -d skill = lousy' का उपयोग करके एक पोस्ट चंक उत्पन्न होगा जो 'name = daniel & skill = lousy' जैसा दिखता है।

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


2
मैनपेज पढ़ें। The contents of the file must already be URL-encoded.ओपी की एक्सएमएल फाइलें निश्चित रूप से नहीं हैं।
कर्नल पैनिक

52
जब तक आप उस सामग्री-प्रकार को निर्दिष्ट करते हैं, जिसकी --header "Content-Type:application/xml"आपको URL-encode
कर्नल पैनिक

12
मैं सिर्फ इतना जोड़ता हूं कि यदि आप "-d" का उपयोग POST के लिए करते हैं, तो इसके लिए "-X" का उपयोग करने की कोई आवश्यकता नहीं है।
ताल लियोन

4
यदि आप कर्ल के फॉलो रिडायरेक्ट्स विकल्प का उपयोग कर रहे हैं -L, तो इसका उपयोग करें -X POSTक्योंकि यह पुनर्निर्देशित अनुरोध को POST का भी उपयोग करेगा। यदि आप सिर्फ -टाइ का उपयोग करते हैं, तो यह पता चलता है, ऐसा नहीं होगा
ट्रिस्टन हवेलिक

18
चेतावनी दी है कि -dस्ट्रिप्स लाइन फ़ाइलों से टूट जाती है। इससे बचने के लिए --data-binaryइसकी जगह इस्तेमाल करें ।
यार

189

से मैनपेज , मेरा मानना है कि इन ड्रौयड आप देख रहे हैं कर रहे हैं:

-F/--form <name=content>

(HTTP) यह कर्ल को भरे हुए फॉर्म का अनुकरण करने देता है जिसमें उपयोगकर्ता ने सबमिट बटन दबाया है। यह RFC2388 के अनुसार सामग्री-प्रकार मल्टीपार्ट / फ़ॉर्म-डेटा का उपयोग करके POST डेटा के लिए कर्ल का कारण बनता है। यह बाइनरी फ़ाइलों आदि को अपलोड करने में सक्षम बनाता है। 'सामग्री' भाग को फ़ाइल के लिए बाध्य करने के लिए, एक @ चिह्न के साथ फ़ाइल का नाम उपसर्ग करें।

उदाहरण के लिए, अपनी पासवर्ड फ़ाइल को सर्वर पर भेजने के लिए, जहाँ 'पासवर्ड' फॉर्म-फील्ड का नाम है जिसमें / etc / पासवार्ड इनपुट होगा:

curl -F password=@/etc/passwd www.mypasswords.com

तो आपके मामले में, यह कुछ ऐसा होगा
curl -F file=@/some/file/on/your/local/disk http://localhost:8080


11
इस समाधान में फ़ाइल को भेजे जाने के नाम पर सक्षम होने का अतिरिक्त लाभ है (ऊपर दिए गए समाधान के विपरीत), और आप इसलिए कई फ़ाइलों को भेज सकते हैं।
डेविड केयर्न्स

13
file=@-यदि आप अपनी फ़ाइल को पाइप करना चाहते हैं तो यह प्रारूप मददगार है।
स्टीवन लू

2
मामले में किसी को भी एक फ़ाइल और अन्य जानकारी भेजने के लिए देख रहे हैं: उपयोग -F कुंजी = वैल-एफ कुंजी = वैल जितनी बार आपको आवश्यकता होती है। एक के बाद एक अलग-अलग स्ट्रिंग में सभी पोस्ट पैरामीटर संलग्न करना और काम नहीं करता है।
२०:१४ बजे १२:14 बजे hgolov

क्या आप उल्लेख कर सकते हैं कि डेस्कटॉप से ​​कर्ल के माध्यम से अपलोड की गई फ़ाइलों को प्राप्त करने में सक्षम होने के लिए प्राप्त करने वाले वेब पेज को कैसे तैयार किया जाए?
सेक्सीबिट

@Cupidvogel: किसी अन्य फ़ाइल अपलोड फ़ील्ड की तरह; विशेष रूप से कर्ल के लिए कोई विशेष हैंडलिंग नहीं है।
पिस्कोवर ने इमारत

47

आप फ़ाइल के साथ विकल्प - डेटा का उपयोग कर सकते हैं।

अनुरोध करने के लिए नाम भेजने के लिए साबुन_गेट। Xml और कर्ल कमांड का उपयोग करके xml सामग्री को लिखें:

कर्ल -X POST --header "सामग्री-प्रकार: पाठ / xml; charset = UTF-8" --data @ साबुन_get.xml your_url


यह उत्तर होना चाहिए क्योंकि ओपी एक फाइल इनलाइन टेक्स्ट पोस्ट करने के बारे में पूछ रहा है।
फियरलेस

स्प्रिंग वेब सर्वर का उपयोग करके मेरे लिए "नॉन एस्केप" दिखाना आवश्यक था, धन्यवाद!
रोज़गारपैक

20

जेनकिन्स 1.494 के साथ, मैं उबंटू लिनक्स 12.10 पर एक जॉब पैरामीटर के लिए एक फाइल भेजने में सक्षम था, curlजिसमें --formमापदंडों का उपयोग किया गया था :

curl --form name=myfileparam --form file=@/local/path/to/your/file.xml \
  -Fjson='{"parameter": {"name": "myfileparam", "file": "file"}}' \
  -Fsubmit=Build \
  http://user:password@jenkinsserver/job/jobname/build

जेनकिंस सर्वर पर, मैंने एक काम को कॉन्फ़िगर किया है जो एकल पैरामीटर को स्वीकार करता है: एक फ़ाइल अपलोड पैरामीटर जिसका नाम है myfileparam

उस कर्ल कॉल की पहली पंक्ति एक वेब फॉर्म का निर्माण करती है जिसका नाम पैरामीटर होता है myfileparam(नौकरी में समान); इसका मान नाम के स्थानीय फ़ाइल सिस्टम पर एक फ़ाइल की सामग्री होगी /local/path/to/your/file.txt@प्रतीक उपसर्ग कर्ल बताता दी फ़ाइल नाम के बजाय एक स्थानीय फ़ाइल भेजने के लिए।

दूसरी पंक्ति एक JSON अनुरोध को परिभाषित करती है जो लाइन एक पर प्रपत्र मापदंडों से मेल खाती है: एक फ़ाइल पैरामीटर नाम myfileparam

तीसरी पंक्ति फॉर्म के बिल्ड बटन को सक्रिय करती है। अगली पंक्ति "/ बिल्ड" प्रत्यय के साथ जॉब URL है।

यदि यह कॉल सफल है, तो कर्ल रिटर्न 0। यदि यह असफल है, तो सेवा से त्रुटि या अपवाद कंसोल पर मुद्रित होता है। यह उत्तर हडसन से संबंधित एक पुराने ब्लॉग पोस्ट से बहुत कुछ लेता है , जिसे मैंने अपनी आवश्यकताओं के लिए फिर से काम किया और फिर से काम किया।


6

यहां बताया गया है कि आप विंडोज पर कर्ल कमांड लाइन का उपयोग करके विंडोज पर एक्सएमएल को कैसे पोस्ट कर सकते हैं। उसके लिए बेहतर उपयोग बैच / .cmd फ़ाइल:

curl -i -X POST -H "Content-Type: text/xml" -d             ^
"^<?xml version=\"1.0\" encoding=\"UTF-8\" ?^>                ^
    ^<Transaction^>                                           ^
        ^<SomeParam1^>Some-Param-01^</SomeParam1^>            ^
        ^<Password^>SomePassW0rd^</Password^>                 ^
        ^<Transaction_Type^>00^</Transaction_Type^>           ^
        ^<CardHoldersName^>John Smith^</CardHoldersName^>     ^
        ^<DollarAmount^>9.97^</DollarAmount^>                 ^
        ^<Card_Number^>4111111111111111^</Card_Number^>       ^
        ^<Expiry_Date^>1118^</Expiry_Date^>                   ^
        ^<VerificationStr2^>123^</VerificationStr2^>          ^
        ^<CVD_Presence_Ind^>1^</CVD_Presence_Ind^>            ^
        ^<Reference_No^>Some Reference Text^</Reference_No^>  ^
        ^<Client_Email^>john@smith.com^</Client_Email^>       ^
        ^<Client_IP^>123.4.56.7^</Client_IP^>                 ^
        ^<Tax1Amount^>^</Tax1Amount^>                         ^
        ^<Tax2Amount^>^</Tax2Amount^>                         ^
    ^</Transaction^>                                          ^
" "http://localhost:8080"

Ul

3

यदि आपके पास कई हेडर हैं तो आप निम्नलिखित का उपयोग करना चाहते हैं:

curl -X POST --header "Content-Type:application/json" --header "X-Auth:AuthKey" --data @hello.json Your_url

3

आप इस कमांड का उपयोग कर सकते हैं:

curl -X POST --header 'Content-Type: multipart/form-data' --header 'Accept: application/json' --header 'Authorization: <<Removed>>' -F file=@"/home/xxx/Desktop/customers.json"  'API_SERVER_URL' -k 

1

यदि आप विंडोज पर कर्ल का उपयोग कर रहे हैं :

curl -H "Content-Type: application/xml" -d "<?xml version="""1.0""" encoding="""UTF-8""" standalone="""yes"""?><message><sender>Me</sender><content>Hello!</content></message>" http://localhost:8080/webapp/rest/hello
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.