หากคุณกำลังมองหาเครื่องมือที่ช่วยให้ทดสอบพร็อกซีและสแครปเว็บไซต์ได้พร้อมกัน คุณมาถูกที่แล้ว cURL เป็นเครื่องมือบรรทัดคำสั่งที่ช่วยให้คุณทดสอบพร็อกซีและทำเว็บสแครปพื้นฐานได้ cURL ใช้งานง่ายและเรียนรู้ได้ไม่ยาก อีกทั้งยังส่งคำขอ เพิ่มคุกกี้ ดีบัก และเชื่อมต่อกับพร็อกซีได้ รวมถึงความสามารถอื่น ๆ
คู่มือทีละขั้นตอนนี้จะแนะนำให้คุณรู้จัก cURL วิธีใช้คำสั่งต่าง ๆ วิธีใช้สำหรับเว็บสแครปเบื้องต้น และวิธีใช้ cURL ร่วมกับพร็อกซีเซิร์ฟเวอร์ เนื้อหาในคู่มือนี้อาจซับซ้อนอยู่บ้าง ดังนั้นก่อนเริ่มอ่าน โปรดตรวจสอบให้แน่ใจว่าคุณมีความเข้าใจพื้นฐานเกี่ยวกับพร็อกซี การรู้พื้นฐานการทำเว็บสแครปด้วยก็จะเป็นประโยชน์เช่นกัน
สารบัญ
- cURL คืออะไร?
- วิธีติดตั้ง cURL
- วิธีใช้ cURL
- วิธีใช้ cURL ร่วมกับพร็อกซีเซิร์ฟเวอร์
- เคล็ดลับและเทคนิคสำคัญ 7 ข้อ
- cURL กับ Wget
- บทสรุป
cURL คืออะไร?
cURL ย่อมาจาก “client URL” เป็นเครื่องมือบรรทัดคำสั่งที่ช่วยให้ถ่ายโอนข้อมูลผ่านอินเทอร์เน็ตได้ เครื่องมือนี้ประกอบด้วยโปรแกรมบรรทัดคำสั่ง curl.exe และไลบรารีข้ามแพลตฟอร์มชื่อ libcurl ซึ่งช่วยให้แลกเปลี่ยนข้อมูลระหว่างเซิร์ฟเวอร์ได้
cURL ใช้งานได้กับระบบปฏิบัติการสมัยใหม่หลากหลายชนิดที่ใช้โปรโตคอลอินเทอร์เน็ต โดยทำงานบนอุปกรณ์ได้ตั้งแต่แล็ปท็อปไปจนถึงรถยนต์ และรองรับโปรโตคอลอินเทอร์เน็ตมากมาย เช่น:
- DICT
- FILE
- FTP
- FTPS
- GOPHER
- HTTP
- HTTPS
- IMAP
- IMAPS
- LDAP
- LDAPS
- MQTT
- POP3
- POP3S
- RTSP
- SCP
- SFTP
- SMB
- SMBS
- SMTP
- SMTPS
- TELNET
- TFTP
ชุมชนขนาดใหญ่ได้พัฒนาเครื่องมือหลากหลายสำหรับ cURL รวมถึง curl-loader ซึ่งเป็นเครื่องมือทดสอบประสิทธิภาพซอฟต์แวร์แบบโอเพนซอร์สบน Linux curl-loader สามารถจำลองลักษณะการทำงานของแอปพลิเคชันจากไคลเอ็นต์ FTP/FTPS และ HTTP/HTTPS จำนวนมากได้ กระบวนการ curl-loader หนึ่งชุดรองรับไคลเอ็นต์เสมือนได้ตั้งแต่ 2,500 ถึง 100,000 ราย โดยไคลเอ็นต์แต่ละรายมีที่อยู่ IP ต้นทางไม่ซ้ำกัน
จุดเริ่มต้นของ cURL
ประวัติของ cURL ย้อนไปถึงช่วงทศวรรษ 1990 ซึ่งเป็นยุคที่เครื่องมือบรรทัดคำสั่งแพร่หลาย ในปี 1996 นักพัฒนาชาวสวีเดน Daniel Stenberg เริ่มพัฒนาสคริปต์สำหรับห้องสนทนาอินเทอร์เน็ตรีเลย์แชต (IRC) เพื่อแปลงสกุลเงินให้ผู้เข้าร่วมแชต เรื่องนี้ทำให้เขาเข้าไปมีส่วนร่วมกับเครื่องมือชื่อ httpget ซึ่งเป็นวิธี HTTP ยอดนิยมสำหรับส่งข้อมูลผ่านเซิร์ฟเวอร์ การทดลองของ Stenberg นำไปสู่ httpget 0.1 ซึ่งประกอบด้วย “โค้ด C ไฟล์เดียวที่มีไม่ถึง 300 บรรทัด”
หลายเดือนต่อมา โปรโตคอลถ่ายโอนไฟล์ (FTP) ได้ถือกำเนิดขึ้น ทำให้ Stenberg เพิ่มการรองรับ FTP ลงในเครื่องมือของเขาและเปลี่ยนชื่อเป็น urlget 2.0 เมื่อวันที่ 30 มีนาคม 1998 เขาเพิ่มการรองรับการอัปโหลด FTP และเปลี่ยนชื่อเครื่องมืออีกครั้งเป็น cURL 3.0
แม้ cURL จะมีศักยภาพสูง แต่ในช่วงแรกกลับไม่ได้รับความสนใจมากนัก ในปี 1998 หลังจากอัปเดตและเผยแพร่เวอร์ชันใหม่ 15 ครั้ง cURL มียอดดาวน์โหลดจากเว็บไซต์ของ Stenberg มากกว่า 300 ครั้ง ต่อมาในปีเดียวกัน Red Hat Linux ได้นำ cURL มาใช้ ตามด้วย Debian ในปี 1999 และ Mac OS X 10.1 ในเดือนสิงหาคม 2001 ตั้งแต่ปี 2001 เป็นต้นมา cURL ได้กลายเป็นคุณสมบัติมาตรฐานในซอฟต์แวร์เกือบทุกชนิดที่เชื่อมต่ออินเทอร์เน็ตได้ รวมถึง Windows 10 อุปกรณ์ iOS และ Android, Sony PS5, Nintendo Switch, Xbox และแม้แต่รถยนต์
ทำไมจึงควรใช้ cURL?
cURL เป็นตัวเลือกยอดนิยมในหมู่นักพัฒนา เนื่องจากสามารถจัดการการทำงานที่ซับซ้อนได้อย่างมีประสิทธิภาพ ความยืดหยุ่น ความสามารถในการเขียนสคริปต์ และไลบรารีที่มาพร้อมกัน ช่วยให้ผสานการทำงานกับโปรแกรมอื่น ๆ ได้อย่างราบรื่น โดยไม่จำเป็นต้องเขียนโค้ดวิเคราะห์ HTTP และโค้ดเครือข่ายขึ้นเอง
cURL มีข้อดีมากมาย เช่น:
- ความสามารถในการทดสอบและดีบักเอนด์พอยต์
- ข้อมูลเชิงลึกโดยละเอียดเกี่ยวกับข้อมูลที่ส่งและรับ
- การบันทึกข้อผิดพลาดอย่างครอบคลุม
- รองรับโปรโตคอลหลากหลายประเภท
- ใช้งานร่วมกับ http2, Metalink, gzip, การคลายการบีบอัดอัตโนมัติ และ Content-Encoding ได้
- คุณสมบัติขั้นสูง เช่น การอัปโหลด FTP, คุกกี้, การยืนยันตัวตนผู้ใช้, การรองรับพร็อกซี, การเชื่อมต่อ SSL และอื่น ๆ
- สลับโปรโตคอลโดยอัตโนมัติหากโปรโตคอลเริ่มต้นทำงานล้มเหลว
- ไวยากรณ์ URL ที่ขึ้นอยู่กับโปรโตคอล
- ฟังก์ชันจำกัดอัตรา
- ระบุส่วนต่าง ๆ ของ URL หรือ URL หลายรายการโดยใช้วงเล็บได้ (เช่น https://google.{one, two, three}.com)
- ระบุ URL ได้ตามจำนวนที่ต้องการผ่านบรรทัดคำสั่ง
นอกจากนี้ นักพัฒนายังชื่นชอบการตรวจสอบใบรับรอง SSL และการรองรับ HTTPS ที่ cURL มีให้เป็นค่าเริ่มต้น เมื่อ cURL เชื่อมต่อกับเซิร์ฟเวอร์ผ่าน HTTPS ก็จะดึงใบรับรองของเซิร์ฟเวอร์มาและเปรียบเทียบกับใบรับรอง CA เพื่อยืนยันความถูกต้องของเซิร์ฟเวอร์ระยะไกล
วิธีติดตั้ง cURL
มาดูวิธีติดตั้ง cURL บนคอมพิวเตอร์ของคุณกัน
macOS
ไม่จำเป็นต้องติดตั้ง cURL บน macOS เนื่องจากมี cURL รวมอยู่ในระบบปฏิบัติการอยู่แล้ว คุณสามารถใช้งานได้โดยตรงในแอปพลิเคชัน Terminal
Windows
ตั้งแต่ Windows 10 เป็นต้นมา ระบบปฏิบัติการจะมี cURL รวมอยู่ด้วย อย่างไรก็ตาม คำสั่ง cURL ทำหน้าที่เป็นนามแฝงของคำสั่ง PowerShell Invoke-WebRequest ดังนั้นเมื่อเรียกใช้คำสั่ง cURL ในเทอร์มินัล Windows ระบบจะเรียกใช้ Invoke-Request อยู่เบื้องหลัง หากต้องการใช้ cURL แทน ให้เปลี่ยน ‘curl’ เป็น ‘curl.exe’ แล้ว PowerShell จะเรียกใช้ cURL แทน Invoke-Request
ตัวอย่างเช่น หากต้องการตรวจสอบเวอร์ชันปัจจุบันของ cURL ที่ติดตั้งบนเครื่อง Windows ให้ป้อนคำสั่งต่อไปนี้ในเทอร์มินัล:
curl.exe --versionผลลัพธ์ควรมีลักษณะดังนี้:
curl 7.83.1 (Windows) libcurl/7.83.1 Schannel Release-Date: 2022-05-13 Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp Features: AsynchDNS HSTS IPv6 Kerberos Largefile NTLM SPNEGO SSL SSPI UnixSocketsหากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ cURL และ Windows เราขอแนะนำให้รับชมวิดีโอนี้ คุณจะได้ทราบว่า cURL คืออะไร วิธีเรียกใช้บน Windows และวิธีส่งคำขอ API แบบ GET, POST, PUT และ DELETE ด้วย cURL
Linux
สำหรับผู้ใช้ Linux ขั้นตอนการติดตั้ง cURL จะแตกต่างกันไปตามดิสทริบิวชันที่ใช้งาน ดิสทริบิวชันยอดนิยมอย่าง Ubuntu และ Fedora มาพร้อมกับ cURL ที่ติดตั้งไว้แล้ว จึงสามารถใช้งานได้โดยตรงในเทอร์มินัล
สำหรับดิสทริบิวชันที่ไม่ได้ติดตั้ง cURL มาให้เป็นค่าเริ่มต้น คุณสามารถติดตั้งได้โดยใช้ตัวจัดการแพ็กเกจของดิสทริบิวชันนั้น ตัวอย่างเช่น บนระบบปฏิบัติการที่ใช้ Debian ให้ใช้คำสั่งต่อไปนี้เพื่อติดตั้ง cURL:
sudo apt-get install curlวิธีใช้ cURL
ตรวจสอบให้แน่ใจว่าได้ติดตั้ง cURL บนอุปกรณ์ของคุณแล้ว ก่อนใช้ cURL ให้ตรวจสอบว่าติดตั้งไว้ในระบบของคุณแล้วหรือไม่ หากยังไม่ได้ติดตั้ง ให้ดาวน์โหลดจากเว็บไซต์ cURL
A. ตรวจสอบการติดตั้ง cURL บนอุปกรณ์ของคุณ
หากต้องการตรวจสอบว่าติดตั้ง cURL ในระบบของคุณแล้วหรือไม่ ให้ทำตามขั้นตอนต่อไปนี้:
- บนพีซี Windows หรือ MacBook ให้เปิดอินเทอร์เฟซบรรทัดคำสั่งหรือเทอร์มินัล PowerShell
- พิมพ์
'curl --version' - กด Enter
หากติดตั้ง cURL บนอุปกรณ์ของคุณแล้ว คุณจะได้รับข้อความลักษณะดังนี้:
curl --version curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL Release-Date: 2017-11-14, security patched: 2020-11-05 Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp Features: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSLหรือ
curl --version curl 7.31.0 (x86_64-apple-darwin12.4.0) libcurl/7.31.0 OpenSSL/0.9.8x zlib/1.2.5 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp Features: IPv6 Largefile NTLM NTLM_WB SSL libzหากเห็นข้อความอื่น แสดงว่ายังไม่ได้ติดตั้ง cURL บนอุปกรณ์ของคุณ และคุณต้องติดตั้งก่อน
B. ระบุไวยากรณ์ cURL ที่เหมาะสมสำหรับการใช้งาน
โดยค่าเริ่มต้น cURL จะใช้โปรโตคอล HTTP โดยมีไวยากรณ์ดังนี้: cURL [options] [URL]
เนื่องจาก cURL รองรับโปรโตคอลหลายประเภท ไวยากรณ์จึงอาจแตกต่างกันเล็กน้อยในแต่ละโปรโตคอล ต่อไปนี้คือตัวอย่างคำสั่ง cURL สำหรับโปรโตคอลเครือข่ายประเภทต่างๆ:
- โปรโตคอลถ่ายโอนไฟล์ (FTP): cURL -T “selected file” “ftp://[target-destination]”
- โปรโตคอลถ่ายโอนจดหมายอย่างง่าย (SMTP): cURL smtp://[smtp-server] –mail-from [sender] –mail-rcpt [recipient] –upload-file [mail-content-file]
- โปรโตคอลเครือข่ายพจนานุกรม [DICT]: cURL “dict://dict.org/d:hi”
การทราบว่าคุณจะใช้โปรโตคอลเครือข่ายใดเป็นสิ่งสำคัญ เพื่อเพิ่มประสิทธิภาพการใช้งาน cURL
C. ใช้ไวยากรณ์ cURL ที่เหมาะสมกับวัตถุประสงค์ของคุณ
cURL ช่วยให้คุณทำงานต่างๆ ได้ เช่น ดาวน์โหลดและอัปโหลดไฟล์ หรือจัดการการตรวจสอบสิทธิ์ผู้ใช้ แต่ละงานต้องใช้ไวยากรณ์ cURL ที่แตกต่างกัน โดยหลักแล้วเป็นเพราะพารามิเตอร์และโปรโตคอลเครือข่ายที่เกี่ยวข้องนั้นแตกต่างกัน
ต่อไปนี้คืองานทั่วไปบางอย่างและคำสั่ง cURL ที่ใช้กับงานเหล่านั้น:
- ดาวน์โหลดไฟล์: curl -o [file name] [URL]
- อัปโหลดไฟล์โดยใช้โปรโตคอล FTP: curl -u [Username:Password] -T [local-file-path] ftp://[URL]
- ส่งคำขอส่วนหัว HTTP: curl -I [URL]
วิธีใช้ cURL สำหรับการดึงข้อมูลเว็บแบบเบื้องต้น
สามารถใช้ cURL สำหรับการดึงข้อมูลเว็บแบบเบื้องต้นร่วมกับภาษาโปรแกรม เช่น PHP ได้
ก่อนเริ่มดึงข้อมูล ให้ตรวจสอบไฟล์ robots.txt ของเว็บไซต์เป้าหมายก่อน ปฏิบัติตามกฎต่างๆ แม้จะดูไม่สมเหตุสมผล เพราะเจ้าของเว็บไซต์มีสิทธิ์กำหนดพารามิเตอร์และข้อจำกัด การปฏิบัติตามไฟล์ robots.txt ขณะรวบรวมข้อมูลเว็บไซต์ถือเป็นแนวทางปฏิบัติมาตรฐาน และการไม่ปฏิบัติตามอาจทำให้เกิดปัญหาทางกฎหมาย
เมื่อคำนึงถึงเรื่องนี้แล้ว ต่อไปนี้คือคำแนะนำการใช้ cURL สำหรับการดึงข้อมูลเว็บแบบเบื้องต้น
เริ่มดึงข้อมูลโดยทำตามขั้นตอนต่อไปนี้:
- เลือกภาษาโปรแกรมสำหรับดึงข้อมูล เช่น PHP ในบทแนะนำนี้จะใช้ PHP
- สร้างไฟล์ PHP ใหม่
- เริ่มต้น cURL handle โดยใช้ curl_init
$curl = curl_init - ตั้งค่า CURLOPT_RETURNTRANSFER เป็น TRUE เพื่อให้ส่งคืนหน้าที่ถ่ายโอนเป็นสตริง คำสั่งนี้แจ้งให้ cURL จัดเก็บหน้าที่ดึงข้อมูลไว้เป็นตัวแปร แทนที่จะแสดงทั้งหน้าตามค่าเริ่มต้น: curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
- เริ่มคำขอและตรวจสอบข้อผิดพลาด:
$page = curl_exec($curl);if(curl_errno($curl)) // check for execution errors { echo 'Scraper error: ' . curl_error($curl); exit; } - ปิดการเชื่อมต่อ:
curl_close($curl);
หากต้องการดึงข้อมูลเฉพาะส่วนใดส่วนหนึ่ง คุณจะต้องระบุสิ่งที่ต้องการดึงข้อมูลภายใต้ id=”case_textlist” โดยค่าเริ่มต้น cURL จะดึงข้อมูลทั้งหน้า:
$regex = '<div id="case_textlist">(.*?)</div>/s'; if (preg_match($regex, $page, $list)) echo $list[0]; else echo "Not found";หากต้องการแยกวิเคราะห์เว็บไซต์โดยใช้พร็อกซีเซิร์ฟเวอร์ใน PHP คุณสามารถใช้ไลบรารี cURL ได้ ต่อไปนี้คือตัวอย่างสคริปต์ PHP ที่ดึงหน้าเว็บผ่านพร็อกซีเซิร์ฟเวอร์:
โค้ด PHP:
<?php // Set the URL to fetch $url = "http://www.example.com"; // Set the proxy server and port $proxy = "proxy.example.com:8080"; // Create a new cURL resource $ch = curl_init(); // Set the cURL options curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_PROXY, $proxy); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Fetch the URL and output the response $response = curl_exec($ch); echo $response; // Close the cURL resource curl_close($ch); ?>ในสคริปต์ข้างต้น คุณสามารถเปลี่ยนตัวแปร $url ให้เป็น URL ของเว็บไซต์ที่ต้องการแยกวิเคราะห์ และเปลี่ยนตัวแปร $proxy ให้เป็นที่อยู่และพอร์ตของพร็อกซีเซิร์ฟเวอร์ที่ต้องการใช้ ฟังก์ชัน curl_setopt() ใช้สำหรับตั้งค่าตัวเลือก cURL ซึ่งรวมถึง URL พร็อกซีเซิร์ฟเวอร์ และการตั้งค่าให้ส่งคืนคำตอบเป็นสตริงแทนการแสดงผลโดยตรง สุดท้าย ฟังก์ชัน curl_exec() ใช้สำหรับดึง URL และแสดงคำตอบด้วย echo จากนั้นเรียกใช้ฟังก์ชัน curl_close() เพื่อปิด cURL resource
ในวิดีโอด้านล่าง คุณจะได้เรียนรู้วิธีสร้างพร็อกซีสเครปเปอร์โดยโหลด URL ของเว็บไซต์ด้วย cURL แล้วจับคู่กับนิพจน์ทั่วไป
วิธีใช้ cURL สำหรับการดึงข้อมูลขั้นสูง
ต่อไปนี้คือการกำหนดค่า cURL ที่ปรับปรุงแล้ว ซึ่งช่วยเพิ่มประสิทธิภาพการดึงข้อมูลเว็บของคุณ
หัวข้อย่อย: การเพิ่ม User Agent
เมื่อใช้ cURL เพื่อดาวน์โหลดหรือดึงข้อมูลจากลิงก์ cURL จะแสดงตัวตนต่อเว็บไซต์ว่าเป็น cURL ในบางกรณี คุณอาจไม่ต้องการเช่นนั้น เนื่องจากบางเว็บไซต์อาจตรวจพบว่า cURL เป็นบอตและบล็อกการใช้งาน
เพื่อหลีกเลี่ยงปัญหานี้ ให้ระบุ user-agent โดยใช้ตัวเลือก -A หรือ –user-agent ในตัวอย่างนี้ เราใช้ user-agent ของ Firefox 65 บน Windows 10:
curl -x https://fineproxy.de/ -v -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0"อีกวิธีหนึ่งคือส่ง user agent ไปพร้อมกับส่วนหัวโดยใช้ตัวเลือก -H:
curl -x https://fineproxy.de/ -v -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0"หัวข้อย่อย: การกำหนดค่าส่วนหัว
เมื่อดึงข้อมูลจากเว็บไซต์ สิ่งสำคัญคือต้องหลีกเลี่ยงไม่ให้ถูกมองว่าเป็นบอต ปัจจุบันเว็บไซต์หลายแห่งบล็อกบอตไม่ให้ดึงข้อมูล เนื่องจากบอตอาจทำให้เซิร์ฟเวอร์ทำงานหนักเกินไปและส่งผลกระทบต่อการให้บริการแก่ผู้ใช้ทั่วไป
เพื่อให้ทำได้เช่นนั้น คุณต้องส่งส่วนหัวที่เหมาะสมไปพร้อมกับ cURL
ก่อนอื่น ให้ตรวจสอบว่าส่วนหัวใดที่คุณส่งไปยังเว็บไซต์เป้าหมายเป็นประจำ โดยคลิกขวาแล้วเลือก “ตรวจสอบ” จากนั้นไปที่แท็บ “เครือข่าย” รีเฟรชเว็บไซต์เป้าหมาย แล้วคุณจะเห็นคำขอที่เกิดขึ้นระหว่างการโหลดเว็บไซต์ หากต้องการตรวจสอบคำขอให้ละเอียดขึ้น คุณยังสามารถคลิกขวาที่คำขอแล้วคัดลอกเป็นบรรทัดคำสั่ง cURL ได้อีกด้วย
หลังจากนั้น ให้กำหนดค่าส่วนหัวใน cURL โดยใช้ตัวเลือก -H หรือ –header ตัวอย่างเช่น วิธีส่งส่วนหัว “Accept” ไปยังเว็บไซต์เป้าหมายมีดังนี้:
curl -x https://fineproxy.de/ -v -H "Accept: text/html"วิธีใช้ cURL กับพร็อกซีเซิร์ฟเวอร์
การใช้ cURL ร่วมกับพร็อกซีรองรับกรณีการใช้งานที่หลากหลาย เช่น การดึงข้อมูลจากเว็บไซต์ ซึ่งจำเป็นต้องใช้พร็อกซีเพื่อป้องกันไม่ให้เว็บไซต์แบนหรือบล็อกคุณ ในคู่มือนี้ คุณจะได้เรียนรู้วิธีส่งข้อมูลผ่านพร็อกซีเซิร์ฟเวอร์โดยใช้ cURL
ทำตามขั้นตอนต่อไปนี้เพื่อใช้ cURL กับพร็อกซี:
1. ตั้งค่าพร็อกซีเซิร์ฟเวอร์
ขั้นแรก ตั้งค่าพร็อกซีตามคำแนะนำที่ผู้ให้บริการพร็อกซีแจ้งไว้ หากต้องการตรวจสอบว่าตั้งค่าพร็อกซีอย่างถูกต้องหรือไม่ ให้ป้อนคำสั่งต่อไปนี้ในเทอร์มินัล:
curl https://httpbin.org/ipคำสั่งนี้จะแสดงที่อยู่ IP ของอุปกรณ์ หากค่าที่ได้ตรงกับที่อยู่ IP เดิมของอุปกรณ์ แสดงว่าตั้งค่าพร็อกซีเซิร์ฟเวอร์ไม่ถูกต้อง หากค่าไม่ตรงกัน แสดงว่ากำหนดค่าพร็อกซีเซิร์ฟเวอร์ถูกต้องแล้ว
2. กำหนดค่าพร็อกซีให้ทำงานร่วมกับคำสั่ง cURL
มีสามวิธีในการกำหนดค่าพร็อกซีเพื่อใช้กับ cURL:
A. ใช้ไฟล์กำหนดค่า (.curlrc)
ไฟล์กำหนดค่าเป็นไฟล์ข้อความที่มีการตั้งค่าตามต้องการ โดยบันทึกในรูปแบบไฟล์ .curlrc ไว้ในไดเรกทอรีระบบเพื่อให้เรียกใช้ได้สะดวกเมื่อรันคำสั่ง cURL
ไฟล์กำหนดค่าพร็อกซีจะมีข้อมูลในรูปแบบนี้:
proxy = "[protocol://][host][:port]"คุณสามารถบันทึกการตั้งค่าหลายรายการไว้ในไฟล์ และเปิดใช้ได้ตามต้องการ ก่อนรันคำสั่ง cURL ให้เปิดไฟล์ แล้วคำสั่ง cURL ทุกคำสั่งที่คุณเรียกใช้จะใช้การตั้งค่าพร็อกซีจากไฟล์กำหนดค่า
การสร้างไฟล์กำหนดค่าเป็นวิธีที่ดีที่สุดสำหรับผู้ที่ใช้ cURL กับพร็อกซีเป็นประจำและดึงข้อมูลปริมาณมาก วิธีนี้ช่วยประหยัดเวลา เพราะไม่ต้องกำหนดค่าพร็อกซีสำหรับ cURL ใหม่ทุกครั้ง
B. ใช้อาร์กิวเมนต์บรรทัดคำสั่ง
วิธีนี้เหมาะสำหรับการใช้พร็อกซีกับคำสั่ง cURL เพียงครั้งเดียว เนื่องจากต้องใช้เพียงไวยากรณ์พร็อกซีของ cURL โดยตรง ไวยากรณ์มีดังนี้:
curl -x "[protocol://][host][:port]" [URL] [options]เนื่องจากโปรโตคอลเริ่มต้นของ cURL คือ HTTP คุณจึงต้องระบุโปรโตคอลและรายละเอียดของพร็อกซีเซิร์ฟเวอร์ โดยเฉพาะอย่างยิ่งหากคุณใช้โปรโตคอลเครือข่ายอื่น
C. ใช้ตัวแปรสภาพแวดล้อม
วิธีที่สามคือการตั้งค่าตัวแปร http_proxy และ https_proxy ซึ่งเรียกว่าตัวแปรสภาพแวดล้อม และส่งผลต่อกระบวนการที่ทำงานในระดับระบบ คำสั่งเหล่านี้เป็นส่วนหนึ่งของระบบปฏิบัติการและสามารถแทนที่พารามิเตอร์อื่นได้
ไวยากรณ์สำหรับการตั้งค่าพร็อกซี cURL ผ่านตัวแปรสภาพแวดล้อมมีดังนี้:
export http_proxy="[protocol://][host][:port]" export https_proxy="[protocol://][host][:port]"หลังจากเรียกใช้คำสั่งเหล่านี้ คำสั่ง cURL ทุกคำสั่งที่คุณเรียกใช้จะผ่านพร็อกซีเซิร์ฟเวอร์โดยอัตโนมัติ ทีนี้มาพูดถึงวิธีนี้เพิ่มเติมกันอีกสักหน่อย
การใช้ cURL กับพร็อกซีผ่านตัวแปรสภาพแวดล้อม
ตัวแปรสภาพแวดล้อมเปรียบเสมือนออบเจ็กต์ที่เก็บค่าซึ่งแก้ไขได้ไว้ในหน่วยความจำ และโปรแกรมซอฟต์แวร์หนึ่งโปรแกรมหรือหลายโปรแกรมสามารถนำไปใช้ได้ ในกรณีนี้ เราสามารถส่งตัวแปรชื่อ http_proxy หรือ https_proxy ให้ cURL ซึ่งมีข้อมูลพร็อกซีของเราอยู่ จึงไม่จำเป็นต้องระบุข้อมูลนี้ทุกครั้งที่เรียกใช้คำสั่ง คุณทำได้โดยเรียกใช้คำสั่งนี้:
$ export http_proxy="http://fineproxy.proxy_type=datacenter.device=desktop:<YOUR-API-KEY>@proxy.fineproxy.de:80"โปรดทราบว่าคุณต้องตั้งชื่อตัวแปรเป็น http_proxy หรือ https_proxy เพื่อให้ cURL เข้าใจ เท่านี้ก็เรียบร้อย คุณไม่ต้องระบุข้อมูลรับรองทุกครั้งที่เรียกใช้คำสั่งอีกต่อไป และสามารถเรียกใช้ cURL ได้ง่าย ๆ ดังนี้:
$ curl http://httpbin.org/getคำสั่งนี้จะแสดงผลลัพธ์ดังต่อไปนี้:
{ "args": {}, "headers": { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8", "Accept-Encoding": "gzip, deflate, br", "Host": "httpbin.org", "Upgrade-Insecure-Requests": "1", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36", "X-Amzn-Trace-Id": "Root=1-633bf912-66ace1104304ddaf5ea8ac65" }, "origin": "132.255.134.104", "url": " http://httpbin.org/get" }ดังที่เห็น ที่อยู่ IP ที่แสดงเป็นที่อยู่ IP ของพร็อกซี ซึ่งยืนยันว่าคุณตั้งค่าพร็อกซีได้อย่างยอดเยี่ยมแล้ว จากจุดนี้ เราสามารถเรียกใช้คำสั่ง cURL ใดก็ได้โดยไม่ต้องระบุข้อมูลพร็อกซี เพราะ cURL จะจัดการให้เราเอง
7 เคล็ดลับและเทคนิคสำคัญ
ในส่วนนี้ เราจะนำเสนอเทคนิคที่น่าสนใจและเคล็ดลับอันทรงคุณค่าสำหรับการใช้พร็อกซีกับ cUrl ซึ่งปรับให้เหมาะกับความต้องการเฉพาะของคุณ
เคล็ดลับ 1: ตั้งค่าพร็อกซีสำหรับ cUrl เท่านั้น
หากต้องการกำหนดพร็อกซีให้ใช้เฉพาะกับงานที่ใช้ cUrl ให้ใช้ชุดคำสั่งต่อไปนี้:
cd ~ $ nano .curlrc- เพิ่มบรรทัดนี้ลงในไฟล์:
proxy=http://user:pwd@IP_address_or_FQDN:portตัวอย่าง:
proxy=http://testuser:[email protected]:3128- เรียกใช้ cUrl ตามปกติ:
$ curl " https://www.reddit.com"เคล็ดลับ 2: เปิดและปิดใช้งานพร็อกซี
สร้าง alias ในไฟล์ .bashrc ด้วยโปรแกรมแก้ไขข้อความเพื่อทำสิ่งนี้:
$ cd ~alias proxyon="export http_proxy=' http://user:pwd@Proxy_IP_or_FQDN:Port';export https_proxy=' http://user:pwd@Proxy_IP_or_FQDN:Port'"alias proxyoff="unset http_proxy;unset https_proxy"ตัวอย่าง:
alias proxyon="export http_proxy=' http://testuser:[email protected]:3128';export https_proxy=' http://testuser:[email protected]:3128'"ตรวจสอบการตั้งค่า alias อย่างรวดเร็วโดยเรียกใช้คำสั่ง alias ในเทอร์มินัล บันทึกไฟล์ .bashrc แล้วอัปเดต shell โดยใช้:
$ ~/.bashrcเคล็ดลับ 3: ข้ามข้อผิดพลาดของใบรับรอง SSL
เมื่อ cUrl พบข้อผิดพลาดของใบรับรอง SSL ก็จะบล็อกคำขอเหล่านั้น หากต้องการ ‘ข้าม’ ข้อผิดพลาดของใบรับรอง SSL เพื่อการดีบัก โดยเฉพาะในกรณีที่ใช้เพียงครั้งเดียว ให้เพิ่ม -k หรือ –insecure ลงในบรรทัดคำสั่ง cUrl:
curl -x "[protocol://][host][:port]" -k [URL]เคล็ดลับ 4: ดูข้อมูลเพิ่มเติมเกี่ยวกับคำขอ
หากคำขอของคุณไม่ทำงานตามที่คาดไว้ คุณอาจต้องตรวจสอบเส้นทางคำขอ ส่วนหัว และข้อผิดพลาดต่าง ๆ หากต้องการตรวจสอบคำขอ ให้เพิ่ม -v (–verbose) ต่อท้าย cUrl ในคำสั่ง ซึ่งจะแสดงส่วนหัวของคำขอทั้งหมดและการเชื่อมต่อที่เกิดขึ้น
เคล็ดลับ 5: ละเว้นพร็อกซีสำหรับคำขอเดียว
หากต้องการแทนที่พร็อกซีสำหรับคำขอใดคำขอหนึ่ง ให้ใช้บรรทัดคำสั่งต่อไปนี้:
curl --proxy " http://user:pwd@Proxy_FQDN_or_IPAddress" " https://reddit.com"หรือใช้:
$ curl --noproxy "*" https://www.reddit.comเพื่อข้ามพร็อกซีทั้งหมด เมื่อใช้ตัวเลือก -v จะแสดงการเชื่อมต่อโดยตรงไปยัง Reddit โดยไม่ใช้พร็อกซีใด ๆ
เคล็ดลับ 6: ใช้พร็อกซี SOCK
หากต้องการใช้พร็อกซี SOCK ประเภทใดก็ตาม (4/4a/5/5h) โครงสร้างโค้ดยังคงเหมือนเดิม ยกเว้นให้เปลี่ยนส่วนที่เกี่ยวข้องเป็นประเภท SOCKS ที่เหมาะสม:
curl -x "socks5://user:pwd@Proxy_IP_or_FQDN:Port" https://www.reddit.comตัวอย่าง:
$ curl -x "socks5://testuser: [email protected]:3128" https://www.reddit.comเคล็ดลับระดับโปร 7: หากไม่ได้ระบุโปรโตคอล cURL จะใช้ SOCKS4 เป็นค่าเริ่มต้น!
cURL เทียบกับ Wget
Wget เป็นเครื่องมือบรรทัดคำสั่งที่มีฟีเจอร์มากมาย ซึ่งช่วยให้ถ่ายโอนไฟล์โดยใช้โปรโตคอลเครือข่ายมาตรฐาน เช่น HTTP, HTTPS และ FTP ได้ ชื่อของเครื่องมือนี้มาจากการนำตัวอักษรตัวแรกของ WWW มารวมกับคำว่า ‘get’ ซึ่งสื่อว่า Wget ถูกสร้างขึ้นมาเพื่อแลกเปลี่ยนข้อมูลบนเว็บเป็นหลัก
ไวยากรณ์มาตรฐานสำหรับคำสั่ง Wget คือ:
Wget [option] [URL]คำสั่ง Wget มีลักษณะคล้ายกับคำสั่ง cURL และทำงานคล้ายกัน แต่ใช้วิธีที่แตกต่างกัน
5 ความคล้ายคลึงระหว่าง cURL และ Wget
- ทั้งคู่เป็นยูทิลิตีบรรทัดคำสั่งที่สามารถดาวน์โหลดไฟล์จาก FTP และ HTTP หรือ HTTPS และรองรับคำขอ HTTP POST
- ทั้งคู่เป็นซอฟต์แวร์โอเพนซอร์ส
- ทั้ง cURL และ Wget เปิดตัวในปีเดียวกัน คือปี 1996
- ทั้งคู่ใช้สัญญาอนุญาตที่คล้ายกัน คือสัญญาอนุญาต GPLv3
- ทั้งคู่เป็นแพ็กเกจซอฟต์แวร์ขนาดเล็กที่ทำงานได้บนระบบปฏิบัติการหลายระบบ
10 ความแตกต่างระหว่าง cURL และ Wget
ความแตกต่างหลักระหว่าง cURL และ Wget อยู่ที่วิธีที่ยูทิลิตีเหล่านี้ดำเนินการตามคำขอและทรัพยากรที่ใช้เพื่อให้บรรลุเป้าหมาย ตารางต่อไปนี้แสดงความแตกต่างเหล่านี้:
| cURL | Wget | |
|---|---|---|
| 1. ไลบรารี | รองรับโดยไลบรารี libcURL | ไม่จำเป็นต้องใช้ไลบรารี |
| 2. การทำงาน | ส่งข้อมูลในการทำงานครั้งเดียว ไม่รองรับการดาวน์โหลดแบบเรียกซ้ำ | รองรับการดาวน์โหลดแบบเรียกซ้ำ |
| 3. โปรโตคอล | รองรับโปรโตคอลเครือข่ายหลากหลายประเภท | รองรับเฉพาะ HTTP(S) และ FTP |
| 4. การดาวน์โหลด | ต้องใช้ -o หรือ -O เพื่อดาวน์โหลด URL ระยะไกลมายังไฟล์ในเครื่อง | ไม่จำเป็นต้องใช้ -o หรือ -O เพื่อดาวน์โหลด URL ระยะไกล |
| 5. การอัปโหลด | สามารถอัปโหลดและถ่ายโอนข้อมูลได้ทั้งสองทิศทาง | รองรับเฉพาะคำขอ HTTP POST แบบพื้นฐาน |
| 6. พร็อกซี | รองรับพร็อกซีประเภท HTTPS, SOCKS 4 และ SOCKS 5 | รองรับพร็อกซี HTTP แต่ไม่รองรับพร็อกซีประเภท SOCKS |
| 7. การยืนยันตัวตน | รองรับวิธีการยืนยันตัวตนเพิ่มเติมสำหรับพร็อกซี HTTP | รองรับเฉพาะกระบวนการยืนยันตัวตนพื้นฐานสำหรับพร็อกซี HTTP |
| 8. การพกพา | พกพาได้สะดวกกว่า และติดตั้งมาล่วงหน้าบน Windows และ macOS | พกพาได้น้อยกว่า และไม่ได้ติดตั้งมาล่วงหน้าบน Windows และ macOS |
| 9. ฟีเจอร์ | ต้องระบุฟีเจอร์แต่ละรายการโดยตรง | มีฟีเจอร์อย่างคุกกี้และการประทับเวลาที่เปิดใช้งานไว้ตามค่าเริ่มต้น |
| 10. ข้อกำหนด | ไม่จำเป็นต้องใช้แพ็กเกจ gnulib หรือคอมไพเลอร์ C99 | ต้องใช้ gnulib และคอมไพเลอร์ C99เมื่อใดควรใช้ cURL หรือ Wget |
ในสถานการณ์ส่วนใหญ่ cURL เป็นตัวเลือกที่ดีที่สุด แต่ก็มีบางกรณีที่ Wget เหมาะสมกว่า คุณต้องพิจารณาว่ายูทิลิตีบรรทัดคำสั่งใดจะช่วยให้ทำงานเสร็จได้เร็วและมีประสิทธิภาพยิ่งกว่า ตัวอย่างเช่น:
- Wget จัดการการลองดาวน์โหลดใหม่เมื่อการเชื่อมต่อไม่เสถียรได้ดีกว่า cURL
- Wget มีความสามารถในการดาวน์โหลด เช่น การดาวน์โหลดแบบเรียกซ้ำอย่างละเอียดและการควบคุมแบนด์วิดท์ ซึ่ง cURL ไม่มี
ดังนั้น ในสถานการณ์เช่นนี้ควรใช้คำสั่ง Wget นอกจากนี้ เมื่อใช้โปรโตคอลเครือข่ายอื่นนอกเหนือจาก HTTP/HTTPS และ FTP cURL จะเป็นตัวเลือกที่ดีกว่า การเลือกใช้ cURL หรือ Wget ขึ้นอยู่กับลักษณะเฉพาะของงานที่คุณกำลังทำอยู่เสมอ
บทสรุป
คำสั่ง cURL เป็นเครื่องมือที่ทรงพลังและอเนกประสงค์สำหรับทุกคนที่ต้องถ่ายโอนข้อมูลปริมาณมากผ่านเครือข่าย การใช้ cURL ร่วมกับพร็อกซีเป็นการอัปเกรดที่น่าสนใจ ซึ่งช่วยให้คุณทำงานแทบทุกอย่างได้ การผสมผสานนี้ช่วยให้มั่นใจได้ว่าข้อมูลจะเป็นส่วนตัวและปลอดภัย โดยไม่สูญเสียความอเนกประสงค์ของคำสั่ง cURL แม้ว่า Wget จะมีความสามารถมากมาย แต่ cURL ก็เป็นตัวเลือกที่ดีกว่าเพราะอินเทอร์เฟซที่ใช้งานง่ายและความสามารถอันทรงพลัง
จากสิ่งที่เราได้พูดคุยกันมาจนถึงตอนนี้ คุณอาจกำลังคิดจะลองสัมผัสความสามารถสุดเจ๋งของ cURL หากยังไม่เคยคิด ลองดูสิ แล้วมา cURL กัน (ตั้งใจเล่นคำ)
