ไวยากรณ์บรรทัดคำสั่ง cURL คืออะไรเพื่อทำการร้องขอ POST


คำตอบ:


2542

ด้วยสาขา:

curl --data "param1=value1&param2=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จะต้องมิฉะนั้นไม่มีแถบความคืบหน้าจะปรากฏขึ้น


7
@LauriRanta --data-urlencode(ไม่มีเส้นประ) ในรุ่นล่าสุดอย่างน้อย
waitinforatrain

4
นอกจากนี้ยังใช้งานได้หากคุณต้องการอัปเดตทรัพยากรด้วย PUT: curl -X PUT ...
Subfuzion

3
ฉันมีปัญหาในการทำความเข้าใจ ... เมื่อไหร่ฉันจะทำมันWith Fieldsเมื่อไหร่Multipartและเมื่อไหร่Without Data?
CodyBugstein

7
แทนการที่คุณสามารถใช้--data -d
user35538

ฉันมีอาร์เรย์ของฟิลด์ ฉันจะทำสิ่งนี้ได้อย่างไร
ARUNBALAN NV

507

สำหรับ 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และส่งเป็นคำขอโพสต์


13
คำอธิบาย @ tom-wijsman: 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
soundmonster

1
เราจะเห็นการตอบสนอง xml ไม่ได้อยู่ในหนึ่งบรรทัด แต่จัดรูปแบบได้อย่างไร?
Vitaly Zdanevich

6
ฉันคิดว่าคุณสามารถละทิ้งสิ่ง-X POSTที่เป็นนัย-dได้
benjifisher

จะให้หลายหัวได้อย่างไร
keya

หัวหลายรายการ: ขด -H "header2: 1" -H "header2: 2" ...
TomášKratochvíla

131

ข้อมูลจาก stdin ด้วย -d @-

ตัวอย่าง:

echo '{"text": "Hello **world**!"}' | curl -d @- https://api.github.com/markdown

เอาท์พุท:

<p>Hello <strong>world</strong>!</p>

6
ยอดเยี่ยมถ้าคุณมีวัตถุ JSON อยู่ในคลิปบอร์ดแล้ว
Luca Steeb

ดียิ่งขึ้น: echo "$ message" | curl -H "Content-Type: application / json" -d @ - "$ url"
rzr

66
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 

61

หากคุณต้องการเข้าสู่เว็บไซต์ให้ทำดังต่อไปนี้:

curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/

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


6
บันทึกจากหน้าคนของขด: 'ตัวเลือก -c, --cookie-jar เป็นวิธีที่ดีกว่าในการจัดเก็บคุกกี้'
maxschlepzig

32
curl -v --data-ascii var=value http://example.com

และมีตัวเลือกอื่น ๆ อีกมากมายตรวจสอบcurl --helpข้อมูลเพิ่มเติม


27

หากคุณขี้เกียจคุณสามารถใช้ google-chrome เพื่อทำงานให้คุณได้ทั้งหมด

  1. คลิกขวาที่รูปแบบที่คุณต้องการที่จะส่งและเลือกตรวจสอบ นี่จะเปิดพาเนล DevTools
  2. เลือกแท็บเครือข่ายใน devtools และทำเครื่องหมายใน ช่องทำเครื่องหมายบันทึกล็อก
  3. ส่งแบบฟอร์มและค้นหารายการด้วยเมธอด POST (คลิกขวาที่ส่วนหัวของคอลัมน์ใด ๆ และตรวจสอบให้แน่ใจว่าได้เลือกวิธีแล้ว )
  4. คลิกขวาที่บรรทัดที่มีการโพสต์และเลือกคัดลอก > คัดลอกเป็นม้วน

chrome devtools: คัดลอกเป็น cURL

Chrome จะคัดลอกข้อมูลคำขอทั้งหมดในรูปแบบ cURL

Chrome ใช้--data 'param1=hello&param2=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"

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