cURL เป็นแพ็คเกจที่มีเครื่องมือต่าง ๆ สำหรับถ่ายโอนข้อมูลระหว่างเซิร์ฟเวอร์ระยะไกล รองรับ FTP, Windows Shares, Mail Servers และ Web Servers ที่ใช้ HTTP
การดาวน์โหลดไฟล์จากเชลล์ Linux มักจะทำได้โดยใช้ cURL คำสั่งดังนี้:
curl https://example.org/file.zip --output file.zip
สิ่งนี้ทำให้การร้องขอไฟล์โดยใช้วิธีการ GET และเพียงแค่ดาวน์โหลด
บทความนี้จะอธิบายรายละเอียดวิธีใช้ cURL เพื่อส่งคำขอ POST รวมถึงข้อมูลในแบบฟอร์ม ซึ่งอาจเป็นประโยชน์หากเซิร์ฟเวอร์ต้องการข้อมูลประจำตัวในการดาวน์โหลดไฟล์ หรือหากคุณกำลังสร้างสคริปต์อัตโนมัติเพื่อส่งข้อมูลไปยังเว็บฟอร์มเพื่อจัดเก็บในฐานข้อมูล
นอกจากนี้ยังจะแตะการส่งข้อมูล XML หรือ JSON จากไฟล์เพื่อใช้กับ REST API
การโพสต์ฟิลด์ที่เข้ารหัส URL โดยใช้ cURL
เราจะส่งข้อมูลแบบฟอร์มต่อไปนี้สำหรับตัวอย่างของเรา:
ชื่อช่อง | ความคุ้มค่า |
---|---|
field1 | ค่า1 |
field2 | ค่า2 |
ข้อมูลจะถูกส่งไปยัง 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 data – นั่นคือ ข้อมูลที่มีช่องว่างและเครื่องหมายทับถูกแทนที่ด้วยรหัสพิเศษเพื่อจัดรูปแบบสำหรับส่งผ่าน 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
การอัปโหลดหลายส่วน/ไฟล์โดยใช้ cURL
คำขอแบบฟอร์มหลายส่วน รวมถึงไฟล์ สามารถส่งผ่าน POST ได้โดยใช้ –form ตัวเลือก. ตัวอย่างด้านล่างจะอัปโหลด myfile.txt ไปยังช่องแบบฟอร์มการอัปโหลดไฟล์:
curl --form "[email protected]" https://example.org/submit.php
หลายส่วนพร้อมช่องและไฟล์ และชื่อไฟล์
นอกจากนี้ยังสามารถรวมชื่อฟิลด์ของฟอร์มและคู่ค่ากับการอัปโหลดไฟล์และ ชื่อไฟล์ สำหรับไฟล์ที่อัปโหลด หากคุณต้องการเปลี่ยนแปลง:
curl --form "[email protected];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 [email protected] https://example.org/submit.php
ข้อมูล JSON และ XML สามารถโพสต์สำหรับบริการ 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 อื่นๆ ของเราที่นี่!