cURL เป็นแพ็กเกจที่มีเครื่องมือต่างๆ สำหรับถ่ายโอนข้อมูลระหว่างเซิร์ฟเวอร์ระยะไกล มันรองรับ FTP, Windows Shares, Mail Servers, และโดยปกติ Web Servers ที่ใช้ HTTP
การดาวน์โหลดไฟล์จาก Linux shell ปกติทำได้ด้วยคำสั่ง cURL เช่นนี้:
curl https://example.org/file.zip --output file.zip
นี่ทำคำขอสำหรับไฟล์โดยใช้เมธอด GET และดาวน์โหลดอย่างง่ายดาย
บทความนี้จะรายละเอียดวิธีใช้ cURL ทำคำขอ POST รวมถึงข้อมูลฟอร์ม นี่อาจมีประโยชน์หากเซิร์ฟเวอร์ต้องการข้อมูลประจำตัวเพื่อดาวน์โหลดไฟล์ หรือหากคุณกำลังสร้างสคริปต์อัตโนมัติเพื่อส่งข้อมูลไปยังฟอร์มเว็บเพื่อจัดเก็บในฐานข้อมูล
มันยังจะกล่าวถึงการส่งข้อมูล XML หรือ JSON จากไฟล์เพื่อใช้กับ REST API
POST ฟิลด์ที่เข้ารหัส URL ด้วย cURL
สำหรับตัวอย่างของเรา เราจะส่งข้อมูลฟอร์มต่อไปนี้:
| Field Name | Value |
|---|---|
| field1 | value1 |
| field2 | value2 |
ข้อมูลจะถูกส่งไปยัง URL https://example.org/submit.php ที่อยู่บน example.org ไม่ได้มีอยู่จริง มันเป็นโดเมนเว็บที่เราสามารถใช้ได้อย่างปลอดภัยสำหรับตัวอย่าง submit.php ก็เป็นชื่อตัวอย่างสำหรับสคริปต์ส่งฟอร์มและไม่อ้างอิงอะไรเฉพาะเจาะจง
ข้อมูลฟอร์มสามารถส่งไปยังคำขอ POST เป็นสตริงเดียว โดยแต่ละฟิลด์ฟอร์มและค่าของมันถูกกำหนดโดย name=value และคั่นด้วย & โดยใช้ตัวเลือก –data:
curl --data "field1=value1&field2=value2" https://example.org/submit.php
อย่างไรก็ตาม นี้ไม่ใช่วิธีที่เหมาะสม เนื่องจากต้องการข้อมูลที่ เข้ารหัส URL – นั่นคือ ข้อมูลที่ช่องว่างและเครื่องหมายทับถูกแทนที่ด้วยรหัสพิเศษเพื่อจัดรูปแบบสำหรับส่งผ่าน HTTP คุณสามารถทำด้วยตนเองได้ แต่ cURL ทำได้ให้คุณโดยใช้ –data-urlencode:
curl --data-urlencode "field1=value1&field2=value2" https://example.org/submit.php
ชื่อฟิลด์ไม่ได้ถูกเข้ารหัส URL – หากคุณต้องการเข้ารหัส ให้เติม = นำหน้า:
curl --data-urlencode "=user name=Linus Torvalds" https://example.org
เราจะใช้ –data-urlencode สำหรับตัวอย่างต่อไปแทน –data เพื่อทำคำขอ POST ให้ง่ายขึ้น
ฟิลด์ที่เข้ารหัส URL แยกต่างหาก
ชื่อ/ค่าของแต่ละฟิลด์ฟอร์มสามารถส่งแยกกันได้ – ทำให้อ่านง่ายขึ้นมาก:
curl --data-urlencode "field1=value1" --data-urlencode "field2=value2" https://example.org/submit.php
การอัปโหลดแบบ Multipart/ไฟล์ ด้วย cURL
คำขอแบบ multipart form รวมถึงไฟล์ สามารถส่งผ่าน POST โดยใช้ตัวเลือก –form ตัวอย่างด้านล่างจะอัปโหลด myfile.txt ไปยังฟิลด์ฟอร์ม fileupload:
curl --form "admin@wsxdn.com" https://example.org/submit.php
Multipart พร้อมฟิลด์และไฟล์ และชื่อไฟล์
คู่ชื่อ/ค่าของฟิลด์ฟอร์มยังสามารถรวมกับการอัปโหลดไฟล์ได้ และ filename สำหรับไฟล์ที่อัปโหลด หากคุณต้องการเปลี่ยนมัน:
curl --form "admin@wsxdn.com;filename=newfilename.txt" --form field1=value1 --form field2=value2 https://example.org/submit.php
ไม่มีข้อมูล
เพื่อทำคำขอ POST โดยไม่มีข้อมูล ให้ส่งสตริงว่าง:
curl --data-urlencode '' https://example.org/submit.php
แสดงความคืบหน้าการอัปโหลดไฟล์
เพื่อติดตามว่าการอัปโหลดดำเนินไปอย่างไร ให้เพิ่มตัวเลือก -o output เพื่อแสดงแถบความคืบหน้า:
curl --tr-encoding -X POST -v -# -o output -T myfile.dat https://example.org/submit.php
ส่งข้อมูลที่จัดเก็บในไฟล์
หากอัปโหลดข้อมูลที่จัดเก็บในไฟล์แล้ว สามารถส่งทั้งหมดในครั้งเดียว แทนที่จะแยกวิเคราะห์ออกเป็นคำสั่ง cURL:
curl --data-urlencode admin@wsxdn.com https://example.org/submit.php
ข้อมูล JSON และ XML สามารถ POST สำหรับบริการ API แบบโปรแกรมได้โดยเพิ่มเฮดเดอร์ที่เหมาะสม:
curl -X POST --data-urlencode @myfile.txt https://example.org/submit.php --header "Content-Type:text/xml" curl -X POST --data-urlencode @myfile.txt https://example.org/submit.php --header "Content-Type:application/json"
สรุป
การเรียนรู้ cURL สำคัญหากคุณทำงานบนบรรทัดคำสั่ง Linux บ่อย มันสามารถทำงานหลายอย่างที่คุณอาจต้องใช้เว็บเบราว์เซอร์เต็มรูปแบบ เพิ่มเติมจากการใช้งานกับ API แบบโปรแกรม และถ่ายโอนข้อมูลไปมาจากเซิร์ฟเวอร์ของคุณเอง
ดูบทความ Linux shell และสคริปต์อื่นๆ ของเราที่นี่!