Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

การส่งคำขอ POST ด้วย cURL

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 อื่นๆ ของเราที่นี่!