วิธีใช้ cURL ใน PowerShell
เครื่องมือบรรทัดคำสั่ง cURL (URL ไคลเอนต์) มักใช้เพื่อส่งหรือรับข้อมูลไปยังเซิร์ฟเวอร์ ข้อได้เปรียบของเครื่องมือคือรองรับหลายโปรโตคอลและมีฟีเจอร์ต่างๆ เช่น การตรวจสอบสิทธิ์ พร็อกซี ประวัติการโอน และอื่นๆ อีกมากมาย
เรายังสามารถใช้ cURL ใน PowerShell ได้ แต่มีสิ่งสำคัญบางประการที่คุณต้องรู้ และ PowerShell ยังมีวิธีการถ่ายโอนข้อมูลเข้าและออกจากเซิร์ฟเวอร์เป็นของตัวเอง
ในบทความนี้ ฉันจะอธิบายวิธีที่คุณสามารถใช้ cURL ใน PowerShell และยกตัวอย่างบางส่วนให้กับคุณ
PowerShell cURL
cURL มีมาตั้งแต่ปี 1997 และใช้เพื่อโต้ตอบกับบริการบนเว็บ เพื่อส่งหรือดึงข้อมูล เครื่องมือนี้มักใช้ในการเขียนสคริปต์หรือทำงานอัตโนมัติ โดยปกติแล้ว คุณอาจต้องการใช้ cURL ในสคริปต์ PowerShell ของคุณเช่นกัน
ตอนนี้ก่อนที่เราจะสามารถใช้ cURL ใน PowerShell ได้ มีสิ่งสำคัญสิ่งหนึ่งที่คุณต้องรู้ จนถึง PowerShell 6 คำสั่ง cURL เคยเป็นนามแฝงใน PowerShell สำหรับ cmdlet Intake-WebRequest สิ่งนี้ทำให้เกิดปัญหา/ความสับสนมากมาย ดังนั้นตั้งแต่ PowerShell 6 คำสั่ง cURL ในตอนนี้จะเรียกใช้โปรแกรมอรรถประโยชน์ curl.exe
เราสามารถเห็นสิ่งนี้ได้โดยการค้นหาคำสั่งด้วย Get-Command cmdlet ทั้งใน PowerShell 5 และ PowerShell 7:
อย่างที่คุณเห็นคำสั่ง curl เรียก curl.exe ใน PowerShell 7 เช่นเดียวกับที่เราคาดหวัง แต่ใน PowerShell 5.1 คำสั่งนั้นเป็นนามแฝงจริงๆ
ปัญหาคือไวยากรณ์ทั้งหมดของ Inrigger-WebRequest cmdlet แตกต่างจาก cURL ดังนั้นคำสั่งของคุณจะไม่ทำงานตามที่คุณคาดหวัง
cURL ได้รับการติดตั้งบน Windows 10/11 ตามค่าเริ่มต้น แต่ถ้าคุณไม่ได้ติดตั้ง cURL คุณสามารถดาวน์โหลดได้ที่นี่
การลบ Alias cURL
หากคุณต้องการใช้ยูทิลิตีบรรทัดคำสั่ง cURL จริงใน PowerShell 5.1 คุณมีสองตัวเลือก คุณสามารถใช้ curl.exe เป็นคำสั่งหรือลบนามแฝงออกได้ ฉันชอบอย่างหลังเพราะจะทำให้แน่ใจว่าสคริปต์ของคุณทำงานบน PowerShell 7 ได้เช่นกัน หากต้องการลบนามแฝง คุณสามารถใช้คำสั่งต่อไปนี้:
Remove-Item alias:curlการใช้ cURL ใน PowerShell
ลองมาดูตัวอย่างวิธีใช้ cURL ใน PowerShell กัน ในตัวอย่างด้านล่าง ฉันจะแสดงเมธอด cURL ที่แท้จริงและเวอร์ชัน PowerShell Inrigg-WebRequest เพื่อให้คุณเข้าใจถึงความแตกต่างได้ดียิ่งขึ้น
คำขอ GET พื้นฐาน
หากต้องการรับเนื้อหาของ URL ที่เฉพาะเจาะจง เราสามารถใช้คำสั่งด้านล่าง
curl https://httpbin.org/ipInvoke-WebRequest -Uri "https://httpbin.org/ip"
# In this case it's better to use, because the output is in JSON
Invoke-RestMethod https://httpbin.org/ipการส่งข้อมูล
ตำแหน่งข้อมูล httpbin ที่ฉันใช้ในตัวอย่างด้านล่างจะส่งคืนข้อมูลที่เราส่งไป แต่ตัวอย่างนี้ก็สมบูรณ์แบบ ในการส่งข้อมูลด้วย cURL เราจำเป็นต้องตั้งค่าวิธี HTTP เป็น POST
curl -X POST https://httpbin.org/anything -d "test=data"
เมธอด Invivo-WebRequest ใช้หลักการเดียวกัน แต่มีไวยากรณ์ต่างกันเท่านั้น:
$body = "test=data"
Invoke-WebRequest -Uri "https://httpbin.org/anything" -Method POST -Body "test=data"ในตัวอย่างข้างต้น เราจะส่งค่าเดียวไปยังจุดสิ้นสุด แต่โดยทั่วไปคือการส่งแบบฟอร์มหรือส่งหลายช่องไปยังจุดสิ้นสุด ใน cURL เราสามารถทำได้โดยการระบุฟิลด์โดยใช้พารามิเตอร์ -F
# POST form data with multiple fields
curl -X POST https://httpbin.org/post `
-F "name=John Doe" `
-F "email=john@example.com" `
-F "message=Hello World"
# Or for a JSON payload
curl -X POST https://httpbin.org/post -H "Content-Type: application/json" `
-d '{"field1":"value1","field2":"value2","field3":"value3"}'เมื่อใช้เมธอด Invoke-WebRequest เราสามารถสร้างแฮชเทเบิลด้วยข้อมูลฟอร์มที่เราต้องการโพสต์ได้ก่อน และเพื่อให้โค้ดสามารถอ่านได้ เรายังสามารถใช้ hashtable และ splatting เพื่อจัดเก็บพารามิเตอร์ทั้งหมดได้
$formData = @{
name = "John Doe"
email = "john@example.com"
message = "Hello World"
}
$post = @{
Uri = "https://httpbin.org/post"
Method = 'Post'
Body = $formData
}
Invoke-WebRequest @postการใช้การรับรองความถูกต้อง
API ส่วนใหญ่ต้องมีรูปแบบการตรวจสอบสิทธิ์เพื่อให้สามารถถ่ายโอนข้อมูลด้วย เมื่อพูดถึงการรับรองความถูกต้อง มีหลายวิธีการ แต่การรับรองความถูกต้องขั้นพื้นฐาน (ชื่อผู้ใช้และรหัสผ่าน) หรือการรับรองความถูกต้องโทเค็นผู้ถือเป็นตัวเลือกที่ใช้บ่อยที่สุด
หากต้องการใช้การตรวจสอบสิทธิ์ขั้นพื้นฐานกับ cURL คุณจะต้องส่งชื่อผู้ใช้และรหัสผ่านในรูปแบบ ชื่อผู้ใช้:รหัสผ่านd ในตัวอย่างด้านล่าง เราจะเพิ่มชื่อผู้ใช้และรหัสผ่านใน URL แต่นั่นเป็นเพียงการทดสอบเท่านั้น:
curl -u "username:password" https://httpbin.org/basic-auth/username/password
# returns on succesfull authentication
{
"authenticated": true,
"user": "username"
}เมื่อใช้เมธอด PowerShell Invoke-WebRequest เราต้องสร้างออบเจ็กต์ข้อมูลรับรองก่อน คุณสามารถขอให้ผู้ใช้ป้อนข้อมูลประจำตัวด้วย cmdlet Get-Credential แต่เมื่อคุณต้องการจัดเก็บข้อมูลประจำตัวในสคริปต์ของคุณ คุณจะต้องแปลงเป็นสตริงที่ปลอดภัยก่อน:
# Get the credentials from the user
$Credentials = Get-Credential -UserName "username" -Message "Enter your password"
# Or store the credentials in the script
$Password = ConvertTo-SecureString "password" -AsPlainText -Force
$Credentials = New-Object System.Management.Automation.PSCredential ("username", $Password)
Invoke-WebRequest -Uri "https://httpbin.org/basic-auth/username/password" -Credential $Credentials
ห่อขึ้น
เป็นสิ่งที่ดีที่ Microsoft ลบนามแฝง cURL ใน PowerShell 7 เนื่องจากแม้ว่า cURL และ Intake-WebRequest อาจดูคล้ายกัน แต่ cURL ก็มีความสามารถมากกว่ามาก หากคุณกำลังสร้างสคริปต์ที่จะทำงานบนเครื่องอื่น คุณสามารถใช้คำสั่ง curl.exe เพื่อให้แน่ใจว่ามีการใช้ cURL แทน Inrigg-WebRequest
หวังว่าคุณจะชอบบทความนี้ หากคุณมีคำถามใด ๆ เพียงแสดงความคิดเห็นด้านล่าง


