คำตอบ:
ด้วยสาขา:
curl --data "param1=value1¶m2=value2" https://example.com/resource.cgi
ด้วยเขตข้อมูลที่ระบุเป็นรายบุคคล:
curl --data "param1=value1" --data "param2=value2" https://example.com/resource.cgi
multipart:
curl --form "fileupload=@my-file.txt" https://example.com/resource.cgi
Multipart พร้อมฟิลด์และชื่อไฟล์:
curl --form "fileupload=@my-file.txt;filename=desired-filename.txt" --form param1=value1 --form param2=value2 https://example.com/resource.cgi
ไม่มีข้อมูล:
curl --data '' https://example.com/resource.cgi
curl -X POST https://example.com/resource.cgi
curl --request POST https://example.com/resource.cgi
สำหรับข้อมูลเพิ่มเติมโปรดดูที่คู่มือขด ม้วนการสอนเกี่ยวกับการลอกเลียนแบบเว็บเบราว์เซอร์ที่เป็นประโยชน์
ด้วย libcurl ให้ใช้curl_formadd()
ฟังก์ชันสร้างฟอร์มของคุณก่อนที่จะส่งแบบปกติ ดูเอกสารประกอบ libcurlสำหรับข้อมูลเพิ่มเติม
สำหรับไฟล์ขนาดใหญ่ให้พิจารณาเพิ่มพารามิเตอร์เพื่อแสดงความคืบหน้าในการอัปโหลด:
curl --tr-encoding -X POST -v -# -o output -T filename.dat \
http://example.com/resource.cgi
-o output
จะต้องมิฉะนั้นไม่มีแถบความคืบหน้าจะปรากฏขึ้น
--data-urlencode
(ไม่มีเส้นประ) ในรุ่นล่าสุดอย่างน้อย
With Fields
เมื่อไหร่Multipart
และเมื่อไหร่Without Data
?
--data
-d
สำหรับ RESTful HTTP POST ที่มี XML:
curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:text/xml"
หรือสำหรับ JSON ให้ใช้สิ่งนี้:
curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:application/json"
นี้จะอ่านเนื้อหาของไฟล์ที่มีชื่อfilename.txt
และส่งเป็นคำขอโพสต์
curl -X POST
แสดงถึงคำขอ HTTP POST, -d
พารามิเตอร์ (รุ่นยาว:) --data
บอก curl ว่าสิ่งต่อไปนี้จะเป็นพารามิเตอร์ POST และ@filename
กำหนดเนื้อหาของไฟล์filename
เป็นพารามิเตอร์ วิธีนี้ใช้ได้ดีกับ RESTful HTTP API ที่พบใน Twitter, Facebook, บริการเว็บอื่น ๆ รวมถึง Ruby on Rails รวมถึง HTTP APIs ของฐานข้อมูลเช่น CouchDB REST ย่อมาจากRepresentation state transfer
-X POST
ที่เป็นนัย-d
ได้
ข้อมูลจาก stdin ด้วย -d @-
ตัวอย่าง:
echo '{"text": "Hello **world**!"}' | curl -d @- https://api.github.com/markdown
เอาท์พุท:
<p>Hello <strong>world</strong>!</p>
curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi
เป็นตัวอย่างที่พบในคู่มือการใช้งาน Curl ตัวอย่าง
ใช้% 26 สำหรับเครื่องหมายแอมเปอร์แซนด์แม้ว่าจะไม่ได้ผล
curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi
หากคุณต้องการเข้าสู่เว็บไซต์ให้ทำดังต่อไปนี้:
curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/
คำขอแรกบันทึกคุกกี้เซสชัน (ที่มีให้เมื่อเข้าสู่ระบบที่ประสบความสำเร็จ) ในไฟล์ "ส่วนหัว" จากนี้ไปคุณสามารถใช้คุกกี้นั้นเพื่อรับรองความถูกต้องของคุณกับส่วนใด ๆ ของเว็บไซต์ที่คุณเข้าใช้งานได้หลังจากเข้าสู่ระบบด้วยเบราว์เซอร์
curl -v --data-ascii var=value http://example.com
และมีตัวเลือกอื่น ๆ อีกมากมายตรวจสอบcurl --help
ข้อมูลเพิ่มเติม
หากคุณขี้เกียจคุณสามารถใช้ google-chrome เพื่อทำงานให้คุณได้ทั้งหมด
Chrome จะคัดลอกข้อมูลคำขอทั้งหมดในรูปแบบ cURL
Chrome ใช้--data 'param1=hello¶m2=world'
ที่คุณสามารถทำให้อ่านได้มากขึ้นโดยใช้เพียงครั้งเดียว-d
หรือ-F
ต่อพารามิเตอร์ซึ่งขึ้นอยู่กับประเภทของการโพสต์ขอให้คุณต้องการที่จะส่งซึ่งสามารถเป็นได้ทั้งapplication/x-www-form-urlencoded
หรือmultipart/form-data
ตาม
นี่จะเป็น POST-ed as application/x-www-form-urlencoded
( ใช้สำหรับแบบฟอร์มส่วนใหญ่ที่ไม่มีการอัปโหลดไฟล์ ):
curl http://httpbin.org/post \
-H "User-Agent: Mozilla/2.2" \
-d param1=hello \
-d name=dinsdale
สำหรับการmultipart/form-data
ใช้ POST -F
( โดยทั่วไปจะใช้กับแบบฟอร์มที่มีการอัปโหลดไฟล์หรือที่ลำดับของฟิลด์มีความสำคัญหรือจำเป็นต้องใช้หลายเขตที่มีชื่อเดียวกัน ):
curl http://httpbin.org/post \
-H "User-Agent: Mozilla/2.2" \
-F param1=hello \
-F name=dinsdale \
-F name=piranha
User-Agent
ส่วนหัวไม่จำเป็นต้องได้ตามปกติ แต่ผมเคยโยนในเพียงในกรณีที่ คุณสามารถหลีกเลี่ยงการตั้งตัวแทนผู้ใช้ในทุกคำขอโดยการสร้าง~/.curlrc
ไฟล์ที่มีเช่นUser-Agent: "Mozilla/2.2"
curl -d "param1=value1¶m2=value2" -X POST http://localhost:3000/data