कर्ल के माध्यम से फ़ाइल में निर्दिष्ट डेटा के साथ पोस्ट अनुरोध भेजें


241

मुझे कमांड लाइन से कर्ल के माध्यम से एक POST अनुरोध करने की आवश्यकता है। इस अनुरोध के लिए डेटा एक फ़ाइल में स्थित है। मुझे पता है कि PUT के माध्यम से यह --upload-fileविकल्प के साथ किया जा सकता है ।

curl host:port/post-file -H "Content-Type: text/xml" --data "contents_of_file"


1
क्षमा करें, शायद मैंने गलती से मेरी समस्या का वर्णन किया, जिसे मुझे php-curl के माध्यम से नहीं, बल्कि linux os से कमांड लाइन से कर्ल कमांड के माध्यम से अनुरोध भेजने की आवश्यकता है।
बेरीडिक

जवाबों:


362

आप --data-binaryतर्क की तलाश कर रहे हैं :

curl -i -X POST host:port/post-file \
  -H "Content-Type: text/xml" \
  --data-binary "@path/to/file"

ऊपर दिए गए उदाहरण में, -iसभी शीर्षकों को प्रिंट करता है ताकि आप देख सकें कि क्या चल रहा है, और -X POSTयह स्पष्ट करता है कि यह एक पोस्ट है। इन दोनों को तार पर व्यवहार को बदलने के बिना सुरक्षित रूप से छोड़ा जा सकता है। फ़ाइल का पथ एक @प्रतीक से पहले होना चाहिए , इसलिए curlफ़ाइल से पढ़ना जानता है।


@ @ इस मामले में यह होगा.xml
dennismonsewicz

54
@भाग अत्यंत महत्वपूर्ण है!
रॉन क्लेन

इसलिए हम --डेटा-बाइनरी पैरामीटर का उपयोग करते हैं, लेकिन वास्तविक फ़ाइल सामग्री पाठ हो सकती है? चूंकि XML आमतौर पर बाइनरी नहीं है।
डेविड

8
वास्तव में आप बस -d ध्वज का उपयोग कर सकते हैं
अनातोली यकीमचुक

16
@ Tol182 नई कहानियों -dको छीनने का कारण बनेगा curl, लेकिन --data-binaryऐसा नहीं होगा।
एक्यूमेनस

44

मुझे कमांड लाइन से कर्ल के माध्यम से एक POST अनुरोध करने की आवश्यकता है। इस अनुरोध के लिए डेटा एक फ़ाइल में स्थित है ...

आपको बस इतना करना है --data तर्क है @:

curl -H "Content-Type: text/xml" --data "@path_of_file" host:port/post-file-path

उदाहरण के लिए, यदि आपके पास फ़ाइल नामक डेटा है stuff.xml तो आप कुछ ऐसा करेंगे:

curl -H "Content-Type: text/xml" --data "@stuff.xml" host:port/post-file-path

stuff.xmlफ़ाइल नाम फाइल करने के लिए एक रिश्तेदार या पूर्ण पथ के साथ बदला जा सकता है: @../xml/stuff.xml, @/var/tmp/stuff.xml, ...


2
यदि आपको नामांकित फ़ील्ड भेजने की आवश्यकता है, तो आप इसका उपयोग भी कर सकते हैं --data "name@stuff"
हरमन

15

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

curl -X POST -i -F "parametername=@filename" -F "additional_parm=param2" host:port/xxx


धन्यवाद! 1. समाधान मेरे काम नहीं आया। parametername=वास्तव में मेरी मदद की :)
Cyborg

3

अधिकांश उत्तर यहां सही हैं, लेकिन जब मैं अपनी विशेष समस्या के लिए यहां उतरा, तो मुझे POST विधि का उपयोग करके बाइनरी फाइल (XLSX स्प्रेड शीट) अपलोड करनी है, मुझे एक बात याद आ रही है , यानी आमतौर पर इसकी न सिर्फ फाइल आपके लोड होती है, आपके पास हो सकती है अधिक फार्म डेटा तत्व , जैसे फ़ाइल को टैग करना या फ़ाइल को टैग करना आदि जैसा मेरा मामला था। इसलिए, मैं इसे यहां जोड़ना चाहूंगा क्योंकि यह मेरा उपयोग मामला था, ताकि यह दूसरों की मदद कर सके।

curl -POST -F comment=mycomment -F file_type=XLSX -F file_data=@/your/path/to/file.XLSX http://yourhost.example.com/api/example_url

0

मुझे HTTP कनेक्शन का उपयोग करना था, क्योंकि HTTPS पर डिफ़ॉल्ट फ़ाइल आकार सीमा है।

https://techcommunity.microsoft.com/t5/IIS-Support-Blog/Solution-for-Request-Entity-Too-Large-error/ba-p/501134

    curl -i -X 'POST' -F 'file=@/home/testeincremental.xlsx' 'http://example.com/upload.aspx?user=example&password=example123&type=XLSX'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.