ว่าด้วยเรื่อง cURL ใช้อย่างไรให้ Pro ใช้อย่างไรถึงจะ Cool

Sharing is caring!

ถึงแม้จะมีเครื่องมือสำหรับทดสอบ APIs ที่ดีอย่าง Postman แต่ในบ้างครั้งบน container virtual ก็ติดตั้ง Postman ยากลำบาก cURL จึงมาช่วยแก้ปัญหานี้ …..

cURL คืออะไร

cURL ย่อมาจาก “Client for URLs” และเป็นเครื่องมือบรรทัดคำสั่งสำหรับการส่งคำขอ HTTP สามารถใช้ถ่ายโอนข้อมูลผ่านโปรโตคอลต่างๆ รวมถึง HTTP, HTTPS, FTP และอื่นๆ โดยทั่วไปจะใช้ในการเขียนสคริปต์และระบบอัตโนมัติเพื่อโต้ตอบกับบริการเว็บและ API

จากปัญหาข้างต้นที่ได้กล่าวไว้ว่า ในบางครั้งเครื่องไม้เครื่องมือที่เราถนัดก็ไม่สามารถใช้งานในบางสถานะการ และวิธีที่ง่ายที่สุดคือใช้ cURL ในการทดสอบ

cURL ใช้งานยังไง

คอมพิวเตอร์ทุกเครื่องจะมีเครื่องมือที่ชื่อว่า Terminal (Window OS, Mac OS) เพียงแค่พิมพ์ในช่องค้นหาว่า “terminal” ก็จะเจอ

$ curl
curl: try 'curl --help' or 'curl --manual' for more information

$ curl --help
Usage: curl [options...] <url>
 -d, --data <data>          HTTP POST data
 -f, --fail                 Fail fast with no output on HTTP errors
 -h, --help <category>      Get help for commands
 -i, --include              Include protocol response headers in the output
 -o, --output <file>        Write to file instead of stdout
 -O, --remote-name          Write output to a file named as the remote file
 -s, --silent               Silent mode
 -T, --upload-file <file>   Transfer local FILE to destination
 -u, --user <user:password> Server user and password
 -A, --user-agent <name>    Send User-Agent <name> to server
 -v, --verbose              Make the operation more talkative
 -V, --version              Show version number and quit

This is not the full help, this menu is stripped into categories.
Use "--help category" to get an overview of all categories.
For all options use the manual or "--help all".

ตัวอย่างคำสั่งเพื่อใช้งาน

  • ส่งคำขอ GET: curl {ระบุ host url ปลายทาง}
$ curl http://example.com
  • ส่งคำขอ POST ด้วยข้อมูล JSON: curl -H “{header key}: {header value}” -X {HTTP method} -d ‘{raw data}’ {ระบุ host url ปลายทาง}
    • `-H` การระบุ properties ใน request headers สามารถกำหนดได้มากกว่า 1 ค่า
    • `-X` การกำหนด HTTP method ให้กับ request เช่น POST, GET, PUT, DELETE, OPTIONS, PATCH เป็นต้น
    • `-d` การเพิ่ม request body ในรูปแบบ string raw data โดยปกติจะส่งไปในรูปแบบของ json format เ เแต่เมื่อกำหนดให้เป็นรูปแบบ json ต้องใส่ header -H “Content-Type: application/json” เพิ่มไปด้วย request ถึงจะสมบูรณ์
    • ** ต้องการส่ง body เป็นแบบ parameters body ให้กำหนด -d “param1=value1&param2=value2” และไม่จำเป็นต้องส่ง -H “Content-Type: application/json”
curl -H "Content-Type: application/json" -X POST -d '{"key":"value"}' http://example.com
  • การส่งคำขอรูปแบบ form data คล้ายเหมือนกำลัง submit form
curl --form "username=seth" --form "password=12345678" \
"https://example.com/api/v4/endpoint"
  • การส่งคำร้องด้วยการแนบไฟล์: curl -F “file=@{ระบุ path file แบบเต็มในเครื่อง}” {ระบุ host url ปลายทาง}
    • `-F` กำหนด local path ของไฟล์ที่จะ upload ใส่ไปใน request
curl -F "file=@/path/to/file.jpg" http://example.com/upload
  • การส่งคำร้องด้วย basic authentication: curl -u “{username}:{password}” {ระบุ host url ปลายทาง}
    • `-u` กำหนด username, password ที่จะถูกคั่นด้วย : (colon)
url -u "username:password" http://example.com
  • ต้องการแสดง response แบบเต็ม: curl -v {ระบุ host url ปลายทาง}
    • `-v` เพิ่มเติมเมื่อต้องการที่จะทราบรายละเอียดอื่น ๆ ใน response ที่ตอบกลับ ตัวอย่างรายะเลียดที่จะแสดง
      • HTTP method: GET, POST, PATCH, …
      • Host: example.com
      • User-Agent: curl/7.85.0
      • Accept: */*
curl -v http://example.com
*   Trying 93.184.216.34:80...
*   Trying 2606:2800:220:1:248:1893:25c8:1946:80...
* Immediate connect fail for 2606:2800:220:1:248:1893:25c8:1946: No route to host
* Connected to example.com (93.184.216.34) port 80 (#0)
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/7.85.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Age: 142166
< Cache-Control: max-age=604800
< Content-Type: text/html; charset=UTF-8
< Date: Wed, 18 Jan 2023 15:41:59 GMT
< Etag: "3147526947+ident"
< Expires: Wed, 25 Jan 2023 15:41:59 GMT
< Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
< Server: ECS (oxr/831B)
< Vary: Accept-Encoding
< X-Cache: HIT
< Content-Length: 1256
< 
  • ต้องการที่จะดาวน์โหลดไฟล์: curl -O {ระบุ host url ปลายทาง}
    • `–remote-name` กำหนดชื่อไฟล์หลังจากดาวน์โหลดให้เหมือนกับที่ remote (host) ตัวอย่าง curl –remote-name http://example.com/file.zip
curl -O http://example.com/file.zip
  • ติดตามการ redirect: curl -L {ระบุ host url ปลายทาง}
    • `-L` ใส่เพื่อติดตามการ redirect
curl -L http://example.com
  • ต้องการที่จะให้คืนค่าแต่ header response: curl -I {ระบุ host url ปลายทาง}
    • `-I` ใส่เมื่อต้องการที่จะดู header response เท่านั้น จะไม่มีการส่งในส่วนอื่น ๆ ที่นอกเหนือจาก headers กลับมา
curl -I http://example.com
HTTP/1.1 200 OK
Content-Encoding: gzip
Accept-Ranges: bytes
Age: 360399
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Wed, 18 Jan 2023 15:53:42 GMT
Etag: "3147526947"
Expires: Wed, 25 Jan 2023 15:53:42 GMT
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Server: ECS (oxr/8315)
X-Cache: HIT
Content-Length: 648

สรุปท้ายบทความ

cURL เป็นคำสั่งที่ช่วยชีวิตได้ดีในยามทุกข์ยาก คุณอาจจะไม่ต้องอ่านทั้งหมดของบทความนี้ แต่ขอให้คุณเก็บ cURL ไว้ในอ้อมอกอ้อมใจ หากคุณสนใจที่จะเรียนรู้เพิ่มเติมผมมีลิ้งเว็บไซต์ที่น่าสนใจ

ขอบคุณที่ติดตามครับป๋ม

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *