Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

วิธีใช้ cURL สำหรับการถ่ายโอนข้อมูลบรรทัดคำสั่งและอื่นๆ

วิธีใช้ cURL สำหรับการถ่ายโอนข้อมูลบรรทัดคำสั่งและอื่นๆ

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

cURL คืออะไร?

Daniel Sternberg เขียน cURL ในปี 1996 เพื่อดึงข้อมูลทางการเงินจากเว็บเซิร์ฟเวอร์และส่งออกไปยังช่อง IRC ต่อมา cURL พัฒนาเป็นเครื่องมืออันทรงพลังสำหรับดึงข้อมูลโดยไม่ต้องใช้เบราว์เซอร์ หากคุณใช้เทอร์มินัลตลอดเวลา cURL จะเป็นหนึ่งในเครื่องมือสำคัญที่สุดในอาร์เซนัลของคุณ

ในส่วนใหญ่ของ Linux distributions cURL ถูกติดตั้งมากับระบบแล้ว สามารถใช้งานได้ทันที แม้จะไม่ได้ติดตั้ง ก็พบได้ใน repository ส่วนใหญ่ จึงติดตั้งผ่าน Software Center ได้ง่าย

สำหรับ Windows ไม่มีคำสั่ง "curl-like" ในขณะที่ macOS มี cURL ติดตั้งมากับระบบ แต่ไม่มีฟลै็กมากเท่ากับเวอร์ชัน Linux

การติดตั้ง

ก่อนจะดำเนินการต่อ ต้องตรวจสอบก่อนว่า cURL ติดตั้งอยู่ในระบบแล้วหรือยัง

Linux

บน Debian/Ubuntu-based distros ใช้คำสั่ง:

sudo apt install curl

บน Arch-based distros:

sudo pacman -S curl

บน Fedora/CentOS/RHEL:

sudo dnf install curl

macOS

macOS มี cURL ติดตั้งมากับระบบแล้ว ไม่ต้องทำอะไรเพิ่มเติม

Windows

  1. สำหรับ Windows 7/10/11 ไปที่หน้าดาวน์โหลด cURL เลือกแพ็กเกจ 64-bit หรือ 32-bit ตามสถาปัตยกรรมที่ใช้ หากไม่แน่ใจ ให้เลือก 64-bit เพราะฮาร์ดแวร์ส่วนใหญ่หลังปี 2006 ใช้ 64-bit
  2. สร้างโฟลเดอร์บนไดรฟ์ระบบหรือใน "C:\Program Files\" ชื่อ "cURL"
วิธีใช้ cURL สำหรับการถ่ายโอนข้อมูลบรรทัดคำสั่งและอื่นๆ
  1. เปิดไฟล์ zip ที่ดาวน์โหลดมา หา "curl.exe" ในโฟลเดอร์ "bin" คัดลอกไปวางในโฟลเดอร์ cURL ที่สร้างไว้ ไฟล์ EXE นี้ทำงานได้ทุกแบบเหมือนบน Linux
  2. เพื่อให้คำสั่งนี้ใช้งานได้จากที่ไหนก็ได้ ต้องเพิ่มลงในตัวแปร PATH ของ Windows
  • คลิกเมนู Start พิมพ์ environment แล้วกด Enter
  • คลิก "Environment Variables..." จะเข้าสู่หน้าตั้งค่าตัวแปรสภาพแวดล้อม
วิธีใช้ cURL สำหรับการถ่ายโอนข้อมูลบรรทัดคำสั่งและอื่นๆ
  • เลือกตัวแปร "Path" แล้วคลิก "Edit..."
  • ในหน้าต่างแก้ไข PATH คลิก "New" แล้วพิมพ์ไดเรกทอรีที่วาง "curl.exe" ไว้ เช่น "C:\Program Files\cURL"
วิธีใช้ cURL สำหรับการถ่ายโอนข้อมูลบรรทัดคำสั่งและอื่นๆ
  • คลิก "OK" บนหน้าต่างทุกอันที่เปิดอยู่ และเพลิดเพลินกับ cURL ในเทอร์มินัลได้เลย!

ทุกฟลากของ cURL ที่ใช้ได้ใน Linux ควรจะทำงานในเวอร์ชัน Windows ได้หมด

ข้อควรระวัง: จำไว้ว่า Command Prompt ไม่ใช่ Windows Terminal Windows Terminal มาพร้อม cURL ใน PowerShell ที่ทำงานคล้ายกันแต่ต่างกันทั้งหมด

เริ่มใช้งาน cURL

พิมพ์ curl maketecheasier.com ในเทอร์มินัลแล้วกด Enter

หากไม่มีเอาต์พัท แสดงว่าเซิร์ฟเวอร์ของเว็บไซต์นี้ไม่ได้ตั้งค่าตอบสนองต่อคำขอเชื่อมต่อแบบสุ่มไปที่โดเมน non-www หากคุณพยายามเข้าถึงเซิร์ฟเวอร์ที่ไม่มีอยู่จริงหรือออฟไลน์ จะได้ข้อความผิดพลาดว่า cURL ไม่สามารถ resolve host ได้

วิธีใช้ cURL สำหรับการถ่ายโอนข้อมูลบรรทัดคำสั่งและอื่นๆ

เพื่อให้ cURL ทำงานได้จริง ต้องระบุโปรโตคอล ในตัวอย่างนี้ใช้ HTTPS เพื่อเรียกหน้าแรกของเว็บไซต์นี้ พิมพ์ curl https://www.maketecheasier.com

วิธีใช้ cURL สำหรับการถ่ายโอนข้อมูลบรรทัดคำสั่งและอื่นๆ

หากสำเร็จ จะเห็นกำแพงข้อมูลขนาดใหญ่ เพื่อให้ข้อมูลอ่านง่ายขึ้น สั่งให้ cURL บันทึกลงไฟล์ HTML:

curl https://www.maketecheasier.com > ~/Downloads/mte.html
วิธีใช้ cURL สำหรับการถ่ายโอนข้อมูลบรรทัดคำสั่งและอื่นๆ

คำสั่งนี้จะนำเนื้อหาของเว็บไซต์ไปบันทึกเป็นไฟล์ HTML ในโฟลเดอร์ Downloads เปิดไฟล์นั้นด้วยไฟล์แมเนเจอร์ จะเห็นสแนปชอตของหน้าแรกเว็บไซต์

วิธีใช้ cURL สำหรับการถ่ายโอนข้อมูลบรรทัดคำสั่งและอื่นๆ

สามารถใช้ฟลาก -o เพื่อผลลัพธ์เดียวกัน:

curl -o ~/Downloads/mte.html https://www.maketecheasier.com

การติดตาม Redirect

เว็บไซต์ส่วนใหญ่ redirect จาก "http" ไป "https" โดยอัตโนมัติ ใน cURL ใช้ฟลาก -L จะติดตาม redirect 301 จนกว่าจะถึงหน้าที่อ่านได้

curl -L https://google.com.
วิธีใช้ cURL สำหรับการถ่ายโอนข้อมูลบรรทัดคำสั่งและอื่นๆ

การดาวน์โหลดต่อเนื่อง (Resume)

เมื่อดาวน์โหลดไฟล์ขนาดใหญ่ การขาดขาดการเชื่อมต่อทำให้รำคาญ cURL มีฟังก์ชัน resume ด้วยฟลาก -C

ตัวอย่างจริง: หยุดการดาวน์โหลด Debian testing ISO ขึ้นใจโดยกด Ctrl+C ระหว่างดาวน์โหลด

วิธีใช้ cURL สำหรับการถ่ายโอนข้อมูลบรรทัดคำสั่งและอื่นๆ

คำสั่งถัดไปใช้ฟลาก -C:

curl -C - -o ~/Downloads/debiantesting.iso -L https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-dvd/debian-testing-amd64-DVD-1.iso
วิธีใช้ cURL สำหรับการถ่ายโอนข้อมูลบรรทัดคำสั่งและอื่นๆ

การดาวน์โหลดดำเนินต่อจากจุดที่หยุดไว้ได้สำเร็จ

การดาวน์โหลดหลายไฟล์พร้อมกัน

cURL ไม่มีวิธีดาวน์โหลดหลายไฟล์ที่直觀 แต่มี 2 วิธี แต่ละวิธีมีข้อเสียเปรียบของตัวเอง

หากไฟล์ที่ดาวน์โหลดเป็นลำดับ (เช่น file1, file2...) ใช้วงเล็บเพื่อระบุช่วง และ "#" ภายในเอาต์พุตที่ระบุด้วยฟลาก -o ตัวอย่าง:

curl "https://example.com/file[1-5].zip" -o "#1_#2"

วิธีง่ายกว่าใช้ -O (--remote-name) ฟลากนี้ทำให้ cURL ดาวน์โหลดไฟล์ระยะไกลมาเป็นไฟล์ท้องถิ่นชื่อเดียวกัน เนื่องจากไม่ต้องระบุเอาต์พุต จึงควรใช้เมื่อเปิดเทอร์มินัลอยู่ในไดเรกทอรีที่ต้องการดาวน์โหลด

curl -O "https://example.com/file1.zip" -O "https://example.com/file2.zip"

หากมีไฟล์ลำดับมากมาย --remote-name-all เหมาะกว่า:

curl --remote-name-all "https://example.com/file[1-5].zip"

แม้ไฟล์ไม่ใช่ลำดับแต่มาจากไซต์เดียวกัน ก็สามารถระบุได้โดยไม่ต้องพิมพ์ URL ซ้ำด้วยวงเล็บปีกกา:

curl --remote-name-all "https://example.com/{file1.zip,anotherfile.zip,thisisfun.zip}"

การดาวน์โหลดพร้อมการยืนยันตัวตน

ดาวน์โหลดไฟล์ที่ต้องการ authentication (เช่น FTP server แบบส่วนตัว) ด้วยฟลาก -u ระบุ username แล้วตามด้วย password คั่นด้วย colon ตัวอย่าง:

curl -u username:password -o ~/Downloads/file.zip ftp://example.com/file.zip

จะยืนยันตัวตน bonobo_bob เข้า FTP server และดาวน์โหลดไฟล์ไปที่โฟลเดอร์ Downloads

การแบ่งและรวมไฟล์

หากต้องการดาวน์โหลดไฟล์ขนาดใหญ่และแบ่งเป็นชิ้นเล็กๆ ใช้ฟลาก --range ของ cURL ระบุ byte เริ่มต้นจนถึง byte สิ้นสุด หากไม่ระบุจุดสิ้นสุด จะดาวน์โหลดจนจบไฟล์

คำสั่งด้านล่างดาวน์โหลด 100 MB แรกของ Arch Linux installation image:

curl --range 0-99999999 -o arch.part1 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso

สำหรับ 100 MB ถัดไป ใช้ --range 100000000-199999999 เป็นต้น สามารถต่อคำสั่งด้วย &&:

curl --range 0-99999999 -o arch.part1 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \
curl --range 100000000-199999999 -o arch.part2 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \
curl --range 200000000-299999999 -o arch.part3 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \
curl --range 300000000-399999999 -o arch.part4 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \
curl --range 400000000-499999999 -o arch.part5 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \
curl --range 500000000-599999999 -o arch.part6 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \
curl --range 600000000-699999999 -o arch.part7 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \
curl --range 700000000- -o arch.part8 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso

หากทำตามคำสั่งข้างต้น จะได้ไฟล์ 8 ไฟล์ในตำแหน่งที่กำหนด

วิธีใช้ cURL สำหรับการถ่ายโอนข้อมูลบรรทัดคำสั่งและอื่นๆ

เพื่อรวมไฟล์กลับคืนกัน บน Linux/macOS ใช้คำสั่ง cat:

cat arch.part? > arch.iso

บน Windows ใช้คำสั่ง copy:

copy /b arch.part* arch.iso

คุณสมบัติประโยชน์อื่นๆ

cURL มีฟลากและการใช้งานมากมาย:

  • -# – ใช้แถบความคืบหน้า แสดงความคืบหน้าของการดาวน์โหลด ตัวอย่าง: curl -# https://asite.com/somefile.zip > ~/somefile.zip
  • -a – สั่งให้ cURL เพิ่มข้อมูลต่อท้ายไฟล์แทนการเขียนทับ ตัวอย่าง: curl -ao ~/collab-full.x https://example-url.com/collab-part26.x
  • --head – ดึงเฉพาะ response header จากเซิร์ฟเวอร์โดยไม่มีข้อมูลเอาต์พุต เหมาะสำหรับ debug เว็บไซต์หรือดู response ที่เซิร์ฟเวอร์ запрограмม์ไว้ ตัวอย่าง: curl --head https://example-url.com
  • --limit-rate – จำกัดแบนด์วิดท์ของการดาวน์โหลด เหมาะเมื่อไม่อยากให้ cURL ใช้แบนด์วิดท์หมด ตัวเลขเดี่ยว = bytes/วินาที K = KB/s M = MB/s ตัวอย่าง: curl --limit-rate 8M https://example-url.com/file.zip > ~/file.zip
  • -o – กำหนดไฟล์เอาต์พุตสำหรับ cURL ตัวอย่าง: curl -o ~/Downloads/file.zip https://thefileplace.com/file.zip -o file2.zip https://thefileplace.com/file2.zip
  • --proxy – ทำงานผ่าน proxy ตัวอย่าง: curl --proxy proxyurl:port https://example-url.com/file.zip > ~file.zip

cURL vs Wget

ทั้งคู่เปิดตัวในปีเดียวกัน (1996) cURL และ Wget ดูเหมือนโปรแกรมพี่น้อง แต่ลึกลงไป จะพบว่ามีวัตถุประสงค์ต่างกัน

Wget

  • สร้างขึ้นมาเพื่อดึงข้อมูลจากอินเทอร์เน็ตโดยเฉพาะ
  • ไม่ต้องใช้ฟลาก -L หรือ -o เหมือน cURL แค่พิมพ์ wget [url] แล้วกด Enter
  • ดาวน์โหลดแบบ recursive ได้ทั้งโฟลเดอร์ด้วยฟลาก -r
  • มีฟังก์ชันครบครันสำหรับการใช้งานประจำวันและงาน sysadmin
  • (ใน Linux) ไม่ต้องการ dependency มาก มักมีให้มากับระบบแล้ว

cURL

  • มีฟลากและฟังก์ชันมากมายสำหรับการดึงข้อมูลระยะไกล
  • รองรับ local networking (LDAP) และ network printers (Samba)
  • ทำงานได้ดีกับไลบรารีการบีบอัด gzip
  • พึ่งพา libcurl ทำให้นักพัฒนาเขียนซอฟต์แวร์หรือ bash script ที่รวมฟังก์ชัน cURL ได้

สรุป: Wget เป็น "เครื่องมือของคนทั่วไป" สำหรับดึงข้อมูลจากอินเทอร์เน็ต ส่วน cURL ขยายความสามารถด้วยการควบคุมที่ละเอียดมากขึ้นสำหรับ power users และ system administrators

คำถามที่พบบ่อย

1. ได้ข้อผิดพลาดเกี่ยวกับ certificate ใน Linux ต้องแก้ไขยังไง?

หากได้ข้อผิดพลาดแบบ "peer's certificate issuer has been marked as not trusted" วิธีแก้ง่ายที่สุดคือติดตั้งแพ็กเกจ common certificates ใหม่ในดิสทริบิวชันของคุณ

Debian/Ubuntu-based:

sudo apt reinstall ca-certificates

Fedora/CentOS/RHEL:

dnf reinstall ca-certificates

Arch-based:

pacman -S ca-certificates

หมายเหตุ: ใน Arch อาจต้องล้าง package cache ด้วย pacman -Scc ก่อนติดตั้ง certificates ใหม่

หากยังมีข้อผิดพลาด อาจเป็นปัญหาที่เซิร์ฟเวอร์

2. ปลอดภัยไหมที่จะรัน cURL และ bash commands พร้อมกัน?

แม้จะไม่ใช่วิธีติดตั้งแอป Linux ที่พบบ่อย แต่นักพัฒนาบางคน (เช่นทีม NodeJS) บังคับให้ใช้ curl ร่วมกับคำสั่ง root-access ที่รันผ่าน bash (เช่น curl [argument] | sudo -E bash -) เพื่อติดตั้งซอฟต์แวร์

ดูน่ากลัว แต่ถ้านักพัฒนาซอฟต์แวร์น่าเชื่อถือ โอกาสที่จะทำให้ระบบเสียหายต่ำมาก ผู้กระทำความผิดอาจแทรกซึมเข้า repository เช่น AUR ของ Arch ได้ ดังนั้นการติดตั้งด้วย curl ร่วมกับคำสั่ง root-access จึงไม่ได้อันตรายกว่าการติดตั้งผ่าน package manager

3. ใช้ cURL กับ Tor ได้ไหม?

ได้! เริ่ม Tor Browser (หรือ standalone tor service) แล้วใช้ฟลาก --proxy Tor ให้ local proxy สำหรับซ่อน IP ในแอปพลิเคชันอื่น ตัวอย่าง cURL กับ Tor:

curl --proxy localhost:9050 https://example.com

Standalone Tor services ใช้พอร์ต 9050 ส่วน Tor Browser ใช้พอร์ต 9150

สรุป

cURL พิสูจน์ความทนทานผ่านการเปลี่ยนแปลงของโลก Linux คงตำแหน่งเป็นเครื่องมือสำคัญในอาร์เซนัลของผู้ใช้เทอร์มินัล

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