ส่งคำขอ POST พร้อมข้อมูลที่ระบุในไฟล์ผ่าน Curl


241

ฉันต้องทำการร้องขอ POST ผ่าน Curl จากบรรทัดคำสั่ง ข้อมูลสำหรับคำขอนี้อยู่ในไฟล์ ฉันรู้ว่าผ่าน PUT สิ่งนี้สามารถทำได้ด้วย--upload-fileตัวเลือก

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

ตรวจสอบคำตอบของฉันstackoverflow.com/questions/6213509/send-json-post-using-php/ …
Muhammad Zeeshan

1
ขออภัยฉันอาจอธิบายปัญหาของฉันผิดฉันต้องส่งคำขอไม่ผ่าน php-curl แต่เพียงผ่านคำสั่ง curl จากบรรทัดคำสั่งจาก linux os
ผสมพันธุ์

1
ดูเพิ่มเติมส่ง / ไฟล์ xml โพสต์ใช้บรรทัดคำสั่งขด
Vadzim

คำตอบ:


363

คุณกำลังมองหา--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
@ส่วนหนึ่งเป็นสิ่งสำคัญมาก!
Ron Klein

ดังนั้นเราจึงใช้พารามิเตอร์ --data-binary แต่เนื้อหาไฟล์จริงสามารถเป็นข้อความได้? เนื่องจาก XML ไม่ใช่ไบนารีทั่วไป
David

8
จริงๆแล้วคุณสามารถใช้ธง just -d
Anatoly Yakimchuk

16
@ Tol182 -dจะทำให้curlตัดการขึ้นบรรทัดใหม่ แต่--data-binaryจะไม่
Acumenus

44

ฉันต้องทำการร้องขอ POST ผ่าน Curl จากบรรทัดคำสั่ง ข้อมูลสำหรับคำขอนี้อยู่ในไฟล์ ...

สิ่งที่คุณต้องทำคือให้--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

คำตอบส่วนใหญ่สมบูรณ์แบบที่นี่ แต่เมื่อฉันลงจอดที่นี่สำหรับปัญหาเฉพาะของฉันฉันต้องอัปโหลดไฟล์ไบนารี (สเปรดชีต XLSX) โดยใช้วิธี POST ฉันเห็นสิ่งหนึ่งที่ขาดหายไปนั่นคือโดยปกติแล้วไม่ใช่แค่ไฟล์ที่คุณโหลดเท่านั้น เพิ่มเติมองค์ประกอบข้อมูลรูปแบบ , เช่นความคิดเห็นที่ไฟล์หรือแท็กไปยังไฟล์อื่น ๆ เช่นกรณีของฉัน ดังนั้นฉันต้องการเพิ่มที่นี่เนื่องจากเป็นกรณีการใช้งานของฉันเพื่อให้สามารถช่วยเหลือผู้อื่นได้

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.