logo
GeekFormat

ตัวแปลง cURL เป็นโค้ด

อินพุตคำสั่ง cURL

วางคำสั่ง cURL ระบบจะแยกวิเคราะห์ URL, เมธอด, ส่วนหัว และเนื้อหาคำขอโดยอัตโนมัติ แล้วสร้างโค้ดที่รันได้ใน 11 ภาษา/ไลบรารี (JavaScript fetch, Axios, Node fetch, Python requests/httpx, Go net/http, PHP cURL, Java OkHttp, C# HttpClient, PowerShell Invoke-RestMethod, wget)

คำขอที่แยกวิเคราะห์แล้ว

https://api.example.com/items1 ส่วนหัวBody 15 ตัวอักษรcurlToCode.flag.followRedirects

โค้ดที่สร้าง

curlToCode.target.fetch

วางคำสั่ง curl รับโค้ดคำขอ HTTP ที่รันได้ใน 11 ภาษาในพริบตา

คำแนะนำที่เกี่ยวข้อง

กรณีการใช้งาน

  • ในแผง Network ของ Chrome DevTools คลิกขวาที่คำขอแล้วเลือก「Copy as cURL」จากนั้นวางลงในเครื่องมือนี้เพื่อแปลงเป็นโค้ดภาษาที่โปรเจกต์ใช้โดยตรง เร็วกว่าการเขียนคำขอด้วยตนเอง 10 เท่า
  • เมื่อเรียกใช้ API ของบุคคลที่สาม เอกสารให้ตัวอย่าง curl แปลงเป็นโค้ด Python requests/Java OkHttp/C# HttpClient อย่างรวดเร็วเพื่อฝังในโปรเจกต์
  • เมื่อดีบั๊กอินเทอร์เฟซในสภาพแวดล้อมการผลิต คัดลอกคำสั่ง curl จากเครื่องมือดักจับแพ็กเกจ (Charles/mitmproxy/Wireshark) แล้วแปลงเป็นโค้ด unit test เพื่อตรวจสอบโดยตรง
  • เมื่อเขียนเอกสาร API สลับไปมาระหว่างตัวอย่างหลายภาษาอย่างรวดเร็ว เพื่อให้โค้ดตัวอย่างที่รันได้สำเร็จแก่ผู้อ่านในสแตกเทคโนโลยีต่างๆ
  • เมื่อตรวจสอบปัญหาคำขอออนไลน์ ใช้ curl ทำซ้ำปัญหาแล้วแปลงเป็นรูปแบบโค้ดส่งให้เพื่อนร่วมงานหรือสร้าง Issue เพื่อให้ผู้อื่นทำซ้ำได้โดยตรง
  • เมื่อพัฒนาข้ามภาษา (เช่น ย้ายจาก Python ไปโปรเจกต์ Go) แปลงคำขอ curl ที่มีอยู่เป็นโค้ดเรียก HTTP client ภาษาใหม่อย่างรวดเร็ว ประหยัดเวลาในการค้นเอกสาร
  • ในสคริปต์ Shell แปลงคำสั่ง curl เป็น PowerShell Invoke-RestMethod ให้เพื่อนร่วมงานฝั่ง Windows หรือแปลงในทางกลับกัน
  • เรียนรู้โปรโตคอล HTTP: เปรียบเทียบโค้ดที่ใช้คำขอเดียวกันในภาษาต่างๆ เพื่อทำความเข้าใจความแตกต่าง API ของไลบรารี HTTP client แต่ละตัว
  • แปลง curl -X POST -d 'json' เป็นโค้ดที่มี Content-Type และ JSON serialization ที่ถูกต้องอย่างรวดเร็ว หลีกเลี่ยงข้อผิดพลาดจากการต่อสตริงด้วยตนเอง
  • เมื่อต้องเรียก API ในสคริปต์ CI/CD แปลงคำสั่ง curl ที่ดีบั๊กในเครื่องเป็นโค้ดภาษาสคริปต์ที่เกี่ยวข้องเพื่อฝังใน pipeline

คุณสมบัติ

  • 11 ภาษา/ไลบรารีเป้าหมาย: ครอบคลุมฟรอนต์เอนด์ (JS fetch/Axios), Node.js (node-fetch), Python (requests/httpx), Go (net/http), PHP (cURL), Java (OkHttp), C# (HttpClient), PowerShell (Invoke-RestMethod), บรรทัดคำสั่ง (wget) ครอบคลุมสแตกเทคโนโลยีหลักทั้งหมด
  • แยกวิเคราะห์คำสั่ง curl อย่างชาญฉลาด: จดจำ URL, HTTP method, ส่วนหัว, เนื้อหาคำขอโดยอัตโนมัติ รองรับอัญประกาศเดี่ยว/คู่, การหลีกเลี่ยงด้วยแบ็กสแลช, การต่อคำสั่งหลายบรรทัด (แบ็กสแลชขึ้นบรรทัดใหม่)
  • รองรับพารามิเตอร์ curl ที่ใช้บ่อยครบถ้วน: -X/--request ระบุ method, -H/--header ส่วนหัว, -d/--data/-F ฟอร์ม/เนื้อหา JSON, -u/--user Basic Auth, -A/--user-agent UA, -b/--cookie Cookie, -e/--referer Referer, -L/--location ติดตามการเปลี่ยนเส้นทาง, --compressed แตกไฟล์อัตโนมัติ, -k/--insecure ข้ามการตรวจสอบใบรับรอง, -I/--head คำขอ HEAD
  • จดจำเนื้อหา JSON อย่างชาญฉลาด: เมื่อตรวจพบ Content-Type เป็น application/json จะใช้ JSON.parse/JSON.stringify/requests(json=)/json= ทำซีเรียไลซ์โดยอัตโนมัติ โค้ดที่สร้างใช้อ็อบเจ็กต์โดยตรงแทนสตริง สอดคล้องกับหลักการของแต่ละภาษา
  • แปลง Basic Auth โดยอัตโนมัติ: เมื่อจดจำ -u user:pass จะสร้างส่วนหัว Authorization: Basic <base64> โดยอัตโนมัติ ใช้กลไก auth ดั้งเดิมของภาษาเป้าหมาย (Python auth=, OkHttp credentials, C# credentials ฯลฯ)
  • ป้ายสถานะความปลอดภัย: ตรวจพบพารามิเตอร์ --compressed/-L/-k/-u โดยอัตโนมัติ แสดงด้วยป้ายสัญลักษณ์ที่เด่นชัดในผลการแยกวิเคราะห์
  • เปลี่ยน HTTP method ด้วยตนเองได้: หลังจากแยกวิเคราะห์ method ของ curl แล้ว ผู้ใช้สามารถเปลี่ยน method ในดรอปดาวน์ได้ด้วยตนเอง (7 วิธี เช่น GET/POST/PUT) และเห็นโค้ดที่เกี่ยวข้องทันที
  • การหลีกเลี่ยงสตริงปลอดภัย: เมื่อสร้างโค้ดแต่ละภาษา ใช้สตริงลิเทอรัลดั้งเดิมของภาษา (Python triple quote/แบ็กสแลช, Go backtick raw string, C# @"", PHP single quote, Java double quote escape) เพื่อหลีกเลี่ยงข้อผิดพลาดทางไวยากรณ์เมื่อรันโค้ด
  • คำเตือนข้อผิดพลาดในการแยกวิเคราะห์: เมื่อป้อนคำสั่ง curl ที่ไม่ถูกต้อง (เช่น ขาด URL, ไม่ได้ขึ้นต้นด้วย curl, POST ไม่มี body ฯลฯ) จะแสดงป้ายเตือนสีส้มพร้อมรายละเอียดปัญหา
  • โหลดตัวอย่าง 3 แบบในคลิกเดียว: มีตัวอย่างทั่วไป 3 แบบคือ GET+Token Auth, POST+JSON, Basic Auth+ติดตามการเปลี่ยนเส้นทาง เพื่อดูความสามารถของเครื่องมือได้อย่างรวดเร็ว
  • ล้างข้อมูลในคลิกเดียว: ปุ่ม Clear รีเซ็ตอย่างรวดเร็ว วางคำสั่งใหม่โดยไม่มีข้อมูลค้าง
  • ประมวลผลในเครื่องทั้งหมด: คำสั่ง curl และเนื้อหาคำขอทั้งหมดถูกแยกวิเคราะห์และแปลงในเบราว์เซอร์ในเครื่อง ไม่อัปโหลดไปยังเซิร์ฟเวอร์ใดๆ Token/รหัสผ่านที่ละเอียดอ่อนจะไม่รั่วไหล
  • คัดลอกโค้ดในคลิกเดียว: หลังจากสร้างโค้ดแล้ว คลิกปุ่ม Copy เพื่อคัดลอกไปยังคลิปบอร์ด วางลงในโปรเจกต์แล้วรันได้ทันที
  • รองรับโหมด HTTPS ไม่ปลอดภัย: พารามิเตอร์ -k/--insecure สร้างการตั้งค่าข้ามการตรวจสอบใบรับรอง TLS ที่เกี่ยวข้องในแต่ละภาษา เช่น Node/Go/Python/PHP/C#/PowerShell (wget ใช้ --no-check-certificate, C# แจ้ง ServicePointManager, Node ตั้งค่า NODE_TLS_REJECT_UNAUTHORIZED)

วิธีการใช้งาน

  1. รับคำสั่ง curl: ในแผง DevTools Network ของเบราว์เซอร์ คลิกขวาที่คำขอ → Copy → Copy as cURL (bash); หรือส่งออก cURL จากเครื่องมือดักจับแพ็กเกจเช่น Postman/Charles/mitmproxy; หรือเขียนคำสั่ง curl ด้วยตนเอง
  2. วางลงในช่องป้อนข้อมูล: วางคำสั่ง curl ลงในพื้นที่ป้อนข้อมูลด้านบน รองรับคำสั่งบรรทัดเดียว/หลายบรรทัด (แบ็กสแลชต่อบรรทัด) ลบการขึ้นบรรทัดใหม่โดยอัตโนมัติ
  3. คลิกปุ่มตัวอย่างเพื่ออ้างอิง: หากไม่คุ้นเคยกับรูปแบบ สามารถคลิก「ตัวอย่าง 1/2/3」เพื่อโหลดคำสั่ง curl ที่ตั้งไว้ล่วงหน้าและดูผลลัพธ์
  4. ดูผลการแยกวิเคราะห์: พื้นที่ผลการแยกวิเคราะห์จะแสดง URL, จำนวน Header, จำนวนตัวอักษรของ Body และป้ายสถานะเช่น การบีบอัด/การเปลี่ยนเส้นทาง/ข้ามใบรับรอง/Basic Auth หากมีปัญหาจะแสดงคำเตือนสีส้ม
  5. ปรับ method หากจำเป็น: หาก method ที่จดจำอัตโนมัติไม่ถูกต้อง (เช่น curl ไม่ได้เติม -X POST แต่ควรเป็น POST) ให้เปลี่ยน HTTP method ในดรอปดาวน์ด้วยตนเอง
  6. เลือกภาษาเป้าหมาย: ในพื้นที่โค้ดเป้าหมาย คลิกปุ่มภาษาที่ต้องการ (fetch/Axios/Python requests/Go/PHP/Java/C#/PowerShell/wget ฯลฯ)
  7. คัดลอกโค้ด: คลิกปุ่ม「คัดลอกโค้ด」วางลงในโปรเจกต์/เทอร์มินัลแล้วรันได้

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

เครื่องมือแปลง cURL เป็นโค้ดมีประโยชน์อย่างไร?ทำไมไม่ใช้คำสั่ง curl โดยตรง?

การเรียกใช้คำสั่ง curl โดยตรงในโค้ด (เช่น shell_exec, subprocess.run) ต้องเริ่มโพรเซสลูก ซึ่งไม่ปลอดภัยและยากต่อการจัดการข้อผิดพลาด รับส่วนหัวการตอบกลับ แปลงประเภท โค้ดการผลิตควรใช้ HTTP client ดั้งเดิมของภาษาโปรแกรม (Python requests, Java OkHttp, JS fetch ฯลฯ) คุณค่าของ curl-to-code คือการแปลคำสั่ง curl ที่คุณคัดลอกจาก DevTools/เครื่องมือดักจับแพ็กเกจเป็นโค้ด HTTP client ของภาษาที่เกี่ยวข้องโดยอัตโนมัติ ประหยัดแรงงานเชิงกลเช่น ค้นเอกสาร API, หลีกเลี่ยงอัญประกาศด้วยตนเอง, จัดการ JSON/การยืนยันตัวตน ฯลฯ เพียงคัดลอกวางก็รันได้

รองรับภาษา/ไลบรารีเป้าหมายใดบ้าง?

ปัจจุบันรองรับ 11 เป้าหมาย: JavaScript fetch (ดั้งเดิมของเบราว์เซอร์), Axios (ไลบรารี HTTP ทั่วไป Node/เบราว์เซอร์), Node.js node-fetch, Python requests (ไลบรารี HTTP ที่ได้รับความนิยมมากที่สุดของ Python), Python httpx (ไลบรารี HTTP รุ่นใหม่ที่รองรับ HTTP/2 และอะซิงโครนัส), Go net/http (ไลบรารีมาตรฐานของ Go), ส่วนขยาย PHP cURL, Java OkHttp (ไลบรารีประสิทธิภาพสูงสำหรับ Android/แบ็กเอนด์), C# HttpClient (ไคลเอนต์ HTTP มาตรฐาน .NET), PowerShell Invoke-RestMethod (ใช้บ่อยในสคริปต์อัตโนมัติ Windows), wget (เครื่องมือดาวน์โหลดบรรทัดคำสั่ง) หากภาษาที่คุณต้องการไม่อยู่ในรายการ (เช่น Ruby, Rust reqwest, Dart http, Swift URLSession ฯลฯ) สามารถติชมได้ที่หน้าเว็บ เราจะพิจารณาเพิ่มตามความต้องการ

จะคัดลอกคำสั่ง curl จาก Chrome DevTools ได้อย่างไร?

ขั้นตอน: 1. เปิด Chrome/Edge กด F12 เพื่อเปิด DevTools; 2. สลับไปที่แผง Network; 3. รีเฟรชหน้าหรือเรียกใช้คำขอเป้าหมาย; 4. ค้นหาคำขอเป้าหมายในรายการคำขอ (สามารถกรองด้วย XHR/JS); 5. คลิกขวาที่คำขอนั้น → Copy → เลือก「Copy as cURL (bash)」(แนะนำเวอร์ชัน bash เนื่องจากเข้ากันได้ดีที่สุด); 6. วางลงในช่องป้อนข้อมูลของเครื่องมือนี้ ระวังอย่าเลือก Copy as fetch (นั่นคือโค้ด JS ไม่ใช่ curl) การทำงานของ Firefox/Safari คล้ายกัน มีตัวเลือก Copy as cURL ทั้งหมด

การจัดการอัญประกาศในคำสั่ง curl ยุ่งยาก รองรับรูปแบบใดบ้าง?

เครื่องมือรองรับอัญประกาศเดี่ยว, อัญประกาศคู่, การหลีกเลี่ยงแบ็กสแลชในรูปแบบ bash; อัญประกาศคู่+การหลีกเลี่ยง ^ ของ Windows cmd; การหลีกเลี่ยงแบ็กติกของ PowerShell สามารถจดจำได้เกือบทั้งหมด แนะนำให้ใช้รูปแบบ bash (ห่อด้วยอัญประกาศเดี่ยว) คำสั่งหลายบรรทัด (แบ็กสแลช \ ต่อบรรทัด) ก็รองรับการวางเช่นกัน เครื่องมือจะลบการขึ้นบรรทัดใหม่และอักขระต่อบรรทัดโดยอัตโนมัติ หากคำสั่ง curl ของคุณซับซ้อนเป็นพิเศษ (มีตัวแปร shell, การแทนที่คำสั่ง $(...), ไปป์ | ฯลฯ) แนะนำให้เรียกใช้คำสั่ง echo ในเทอร์มินัลเพื่อพิมพ์ curl จริงหลังจากขยายแล้วจึงคัดลอก หรือทำให้ง่ายขึ้นด้วยตนเองก่อน (แทนที่ตัวแปรด้วยค่าจริง)

ทำไมเมื่อใช้ -d ส่ง JSON ใน curl เซิร์ฟเวอร์จึงได้รับข้อมูลอ่านไม่ออก/400?

นี่เป็นหนึ่งในข้อผิดพลาด curl ที่พบบ่อยที่สุด ตัวเลือก -d/--data ของ curl มี Content-Type เริ่มต้นเป็น application/x-www-form-urlencoded (รูปแบบฟอร์ม) ไม่ใช่ application/json หากคุณใช้ curl -d '{"name":"demo"}' url โดยตรง เซิร์ฟเวอร์จะแยกวิเคราะห์ตามฟอร์ม (แยกวิเคราะห์ล้มเหลวหรือได้ข้อมูลว่าง) ต้องเติมส่วนหัว -H "Content-Type: application/json" อย่างชัดเจนจึงจะส่ง JSON ได้อย่างถูกต้อง เครื่องมือนี้จะให้คำเตือนสีส้มเมื่อตรวจพบ body แต่ไม่มี Content-Type

โค้ดที่สร้างสามารถคัดลอกไปรันได้โดยตรงหรือไม่?ต้องติดตั้ง dependency อะไรบ้าง?

โค้ดของภาษาส่วนใหญ่สามารถรันได้โดยตรงโดยใช้ไลบรารีมาตรฐาน (fetch/Go net/http/PHP cURL/C# HttpClient/PowerShell/wget เป็นในตัว) ไม่ต้องติดตั้งเพิ่มเติม อื่นๆ ต้องใช้ไลบรารีบุคคลที่สาม: Axios (ต้อง npm install axios), node-fetch (ต้อง npm install node-fetch, Node 18+ มี fetch ในตัวไม่ต้องติดตั้ง), Python requests (pip install requests), Python httpx (pip install httpx), Java OkHttp (ต้องเพิ่ม dependency okhttp3 ด้วย Maven/Gradle) โค้ดจะพิมพ์รหัสสถานะและข้อความการตอบกลับตามค่าเริ่มต้น คุณสามารถแก้ไขตรรกะการประมวลผลตามความจำเป็น

รองรับการอัปโหลดไฟล์ multipart/form-data (พารามิเตอร์ -F) หรือไม่?

รองรับพื้นฐาน: พารามิเตอร์ -F จะถูกจดจำว่าเป็นเนื้อหาคำขอ (body) แต่โค้ดที่สร้างในปัจจุบันจะประมวลผล @file เป็นสตริงตามตัวอักษรแทนที่จะเป็นการอัปโหลดไฟล์จริง การอัปโหลดไฟล์ต้องอ่านเนื้อหาไฟล์ในเครื่อง แต่ละภาษามีวิธีการจัดการที่แตกต่างกันมาก (JS ใช้ FormData/FormData.append, Python ใช้พารามิเตอร์ files=, Go ใช้ multipart.Writer) แนะนำให้อ้างอิงเอกสารการอัปโหลดไฟล์ของไลบรารีที่เกี่ยวข้องเพื่อปรับแก้บนพื้นฐานของโค้ดที่เครื่องมือสร้างขึ้น เวอร์ชันถัดไปจะปรับปรุงการรองรับ multipart

จะอัปโหลดคำสั่ง curl และข้อมูลที่ละเอียดอ่อนของฉันหรือไม่?

ไม่เลย กระบวนการแยกวิเคราะห์และสร้างโค้ดทั้งหมดเสร็จสมบูรณ์ 100% ในเบราว์เซอร์ของคุณในเครื่อง (JavaScript ล้วนๆ ฝั่งฟรอนต์เอนด์) คำสั่ง curl, Token/Cookie/รหัสผ่านในส่วนหัวคำขอ, ข้อมูลในเนื้อหาคำขอจะไม่ถูกส่งไปยังเซิร์ฟเวอร์ใดๆ คุณสามารถตัดการเชื่อมต่อเครือข่ายเพื่อใช้เครื่องมือนี้ได้ ไม่ต้องกังวลเกี่ยวกับการรั่วไหลของข้อมูลที่ละเอียดอ่อน

จะจัดการ -k/--insecure ข้ามการตรวจสอบใบรับรองในโค้ดแต่ละภาษาได้อย่างไร?

เมื่อตรวจพบพารามิเตอร์ -k เครื่องมือนี้จะสร้างการตั้งค่าข้ามการตรวจสอบใบรับรองที่เกี่ยวข้องสำหรับแต่ละภาษาเป้าหมาย: Python requests/httpx ใช้ verify=False; Node.js ตั้งค่า process.env.NODE_TLS_REJECT_UNAUTHORIZED='0'; Go สร้าง tls.Config{InsecureSkipVerify: true} แบบกำหนดเอง; PHP ตั้งค่า CURLOPT_SSL_VERIFYPEER=false และ CURLOPT_SSL_VERIFYHOST=0; Java OkHttp ต้องกำหนด TrustManager เอง (มีข้อคิดเห็นเตือนในโค้ด เนื่องจากโค้ดค่อนข้างยาว); C# สามารถกำหนด ServerCertificateCustomValidationCallback เอง; PowerShell ใช้ -SkipCertificateCheck (PS6+); wget ใช้ --no-check-certificate; fetch ของเบราว์เซอร์ไม่สามารถข้ามใบรับรองได้ (ข้อจำกัดความปลอดภัยของเบราว์เซอร์ มีข้อคิดเห็นอธิบายในโค้ด) หมายเหตุ: การตั้งค่าเหล่านี้มีไว้สำหรับการทดสอบพัฒนาในเครื่องเท่านั้น อย่าปิดใช้งานการตรวจสอบใบรับรองในสภาพแวดล้อมการผลิตอย่างแน่นอน

ทำไมโค้ด Go ที่สร้างจึงไม่ติดตามการเปลี่ยนเส้นทาง?เติม -L แล้วควรจะติดตามนะ?

พฤติกรรมเริ่มต้นของ net/http ของ Go คือไม่ติดตามการเปลี่ยนเส้นทาง (สอดคล้องกับพฤติกรรมเริ่มต้นของ curl ซึ่ง curl ต้องเติม -L อย่างชัดเจนจึงจะติดตาม) เมื่อเครื่องมือตรวจพบพารามิเตอร์ -L จะสร้าง client ว่างเปล่า (http.Client{} มีค่าเริ่มต้น CheckRedirect เป็น nil คือติดตามการเปลี่ยนเส้นทาง 10 ครั้ง); หากไม่เติม -L จะสร้าง client ที่ CheckRedirect ส่งคืน http.ErrUseLastResponse คือไม่ติดตามการเปลี่ยนเส้นทาง (สอดคล้องกับพฤติกรรมเมื่อ curl ไม่เติม -L) หากคุณต้องการให้ Go ติดตามการเปลี่ยนเส้นทางเสมอ สามารถใช้ http.DefaultClient หรือกำหนด Client{Timeout: ...} เองในโค้ดได้โดยตรง

จะจัดการคำขอที่ต้องเข้าสู่ระบบ/มี Cookie ได้อย่างไร?

มีสองวิธี: ①คัดลอก curl โดยตรงจาก DevTools ของเบราว์เซอร์ที่เข้าสู่ระบบแล้ว (แนะนำ): คลิกขวาที่คำขอ→Copy as cURL ด้วยวิธีนี้ cookie/header จะรวมอยู่โดยอัตโนมัติ วางและแปลงแล้วรันได้โดยตรง; ②ระบุค่า Cookie ด้วยตนเองใน curl ด้วย -b/--cookie (-b 'sessionid=abc; token=xyz'), ระบุ Basic Auth ด้วย -u/--user, ระบุ Bearer Token ด้วย -H "Authorization: Bearer xxx" เครื่องมือจะแปลงส่วนหัวเหล่านี้ตามเดิม หมายเหตุ: Cookie ที่คัดลอกจากเบราว์เซอร์มีอายุการใช้งาน อาจหมดอายุหลังจากผ่านไปสองสามชั่วโมงและต้องคัดลอกใหม่

ทำไมเนื้อหา JSON ใน Python requests จึงใช้พารามิเตอร์ json= แทน data=?

พารามิเตอร์ data ของไลบรารี Python requests จะเข้ารหัส dict ตาม application/x-www-form-urlencoded, ส่งสตริงตามเดิม ในขณะที่พารามิเตอร์ json จะซีเรียไลซ์ dict/รายการเป็นสตริง JSON อัตโนมัติ และตั้งค่าส่วนหัว Content-Type: application/json อัตโนมัติ (หากคุณไม่ได้ตั้งค่าด้วยตนเอง) เมื่อเครื่องมือนี้ตรวจพบ Content-Type มี application/json และ body เป็น JSON ที่ถูกต้อง จะแยกวิเคราะห์ JSON เป็น Python dict และใช้พารามิเตอร์ json= โดยอัตโนมัติ ทำให้โค้ดกระชับขึ้น ไม่ต้อง json.dumps ด้วยตนเอง และจะไม่ลืมส่วนหัว Content-Type body ที่ไม่ใช่ JSON (ฟอร์ม/XML/ข้อความธรรมดา) ใช้พารามิเตอร์ data= เพื่อส่งสตริงดั้งเดิม

คำสั่ง curl ยาวและมีส่วนหัวมาก จะทำอย่างไรเมื่อโค้ดที่สร้างมีส่วนหัวทั้งหมดติดมาด้วย?

คำสั่ง curl ที่คัดลอกจาก DevTools จะมีส่วนหัวจำนวนมากที่เบราว์เซอร์เพิ่มอัตโนมัติ (Host, Connection, Accept, Accept-Encoding, Accept-Language, Sec-Fetch-*, sec-ch-ua, Upgrade-Insecure-Requests ฯลฯ) ส่วนหัวเหล่านี้ส่วนใหญ่ในโค้ดไม่จำเป็นต้องตั้งค่าอย่างชัดเจน (HTTP client จะเพิ่มค่าเริ่มต้นที่เหมาะสมอัตโนมัติ เช่น Accept-Encoding, Connection, Host, Content-Length ฯลฯ) แนะนำให้ลบส่วนหัวที่ไม่จำเป็นด้วยตนเองหลังจากคัดลอกโค้ดที่สร้างขึ้น เก็บไว้อย่างน้อย: Content-Type, Authorization, Cookie (หากจำเป็น), ส่วนหัวธุรกิจที่กำหนดเอง ส่วนหัวที่มากเกินไปไม่เพียงแต่ทำให้โค้ดดูยุ่งเหยิง แต่ยังอาจทำให้พฤติกรรมผิดปกติ (เช่น ตั้งค่า Accept-Encoding อย่างชัดเจนแต่ไคลเอนต์จะไม่แตกไฟล์อัตโนมัติ)

รองรับพารามิเตอร์ HTTPS พรอกซี (-x/--proxy) หรือไม่?

ปัจจุบันพารามิเตอร์ HTTP พรอกซี (-x/--proxy) ยังไม่ได้รับการแปลงอัตโนมัติ การกำหนดค่าพรอกซีในแต่ละภาษามีความแตกต่างกันมาก (JS fetch ไม่มีการรองรับพรอกซีดั้งเดิมต้องใช้ Agent, Python ใช้พารามิเตอร์ proxies=, Go ผ่าน Transport.Proxy, PHP ใช้ CURLOPT_PROXY, C# ใช้ WebProxy, Java ใช้ OkHttpClient.Builder().proxy()) ส่วนหัวพรอกซี (การยืนยันตัวตนของพรอกซีเอง) ก็ต้องได้รับการจัดการแยกต่างหาก พารามิเตอร์ที่เกี่ยวข้องกับพรอกซีในเวอร์ชันปัจจุบันจะถูกละเลย คุณสามารถเพิ่มการตั้งค่าพรอกซีด้วยตนเองบนพื้นฐานของโค้ดที่สร้างขึ้น เวอร์ชันถัดไปจะปรับปรุงการรองรับพรอกซี

เมื่อเปรียบเทียบกับเครื่องมือออนไลน์เช่น curlconverter.com มีความแตกต่างอย่างไร?

เมื่อเปรียบเทียบกับเครื่องมือชื่อดังเช่น curlconverter.com จุดแข็งของ curl-to-code ของ GeekFormat คือ: ①ประมวลผลในเครื่องทั้งหมด (ตรรกะการประมวลผลของ curlconverter อยู่ที่ฝั่งเซิร์ฟเวอร์หรือไคลเอนต์) ไม่อัปโหลดข้อมูลจึงปลอดภัยกว่า; ②อินเทอร์เฟซภาษาไทยและคำอธิบายภาษาไทย เป็นมิตรกับนักพัฒนาไทย; ③โค้ดที่สร้างสอดคล้องกับการใช้งานจริงในการผลิตมากขึ้น (เช่น Python requests ใช้พารามิเตอร์ json= สำหรับ JSON body แทน data=, พฤติกรรมเริ่มต้นของ Go สอดคล้องกับ curl, C# จัดการ Content-Type อย่างถูกต้องโดยไม่ฮาร์ดโค้ด application/json); ④มีเอกสารเชิงลึก, FAQ, ตารางเปรียบเทียบ, การแก้ไขปัญหา ไม่เพียงแต่สร้างโค้ดแต่ยังช่วยให้คุณเข้าใจว่าทำไมถึงเขียนแบบนั้น; ⑤ฟรีไม่มีโฆษณา ไม่ต้องลงทะเบียนเข้าสู่ระบบ ไม่ต้องใช้เครือข่ายใดๆ ก็สามารถใช้งานได้

术语表

cURL / curl
เครื่องมือบรรทัดคำสั่งโอเพนซอร์สและไลบรารี libcurl สำหรับส่งคำขอโปรโตคอล HTTP/HTTPS/FTP ฯลฯ ผ่าน URL ในบรรทัดคำสั่ง เป็นเครื่องมือที่นักพัฒนาใช้บ่อยที่สุดสำหรับดีบั๊ก API
HTTP method
การกระทำของคำขอ HTTP ที่พบบ่อย ได้แก่ GET (อ่าน), POST (สร้าง), PUT (อัปเดตทั้งหมด), PATCH (อัปเดตบางส่วน), DELETE (ลบ), HEAD (รับส่วนหัว), OPTIONS (สอบถามความสามารถของเซิร์ฟเวอร์)
ส่วนหัวคำขอ (Header)
คู่คีย์-ค่าเมตาดาต้าในคำขอ HTTP เช่น Content-Type, Authorization, User-Agent, Cookie, Accept ฯลฯ ระบุใน curl ด้วย -H/--header
เนื้อหาคำขอ (Body)
ส่วนข้อมูลของคำขอ HTTP ใช้บ่อยใน POST/PUT/PATCH ระบุใน curl ด้วย -d/--data/--data-binary/-F รูปแบบที่พบบ่อย ได้แก่ JSON, form-urlencoded, multipart/form-data
Content-Type
ส่วนหัวคำขอ/การตอบกลับที่ระบุประเภทมีเดียของ body application/json หมายถึง JSON, application/x-www-form-urlencoded หมายถึงฟอร์มเข้ารหัส URL, multipart/form-data หมายถึงฟอร์มอัปโหลดไฟล์
Basic Auth
การยืนยันตัวตนพื้นฐาน HTTP ส่งชื่อผู้ใช้และรหัสผ่านผ่านส่วนหัว Authorization: Basic base64(user:pass) ระบุใน curl ด้วย -u user:pass
Bearer Token
วิธีการยืนยันตัวตนแบบโทเค็น ส่งผ่านส่วนหัว Authorization: Bearer <token> ใช้บ่อยใน JWT/OAuth2
User-Agent
ส่วนหัวคำขอที่ระบุประเภทไคลเอนต์ (เบราว์เซอร์/บอท/สคริปต์) curl ส่ง "curl/หมายเลขเวอร์ชัน" ตามค่าเริ่มต้น เว็บไซต์จำนวนมากจะบล็อก UA ที่ไม่ใช่เบราว์เซอร์ มักใช้ -A ระบุ
Cookie
คู่คีย์-ค่าที่เซิร์ฟเวอร์ส่งผ่าน Set-Cookie และเบราว์เซอร์ส่งกลับผ่านส่วนหัว Cookie ในคำขอต่อๆ ไป ใช้สำหรับการรักษาเซสชัน curl -b ส่ง Cookie, -c บันทึก Cookie
Referer
ส่วนหัวคำขอที่ระบุ URL ของหน้าที่มาของคำขอปัจจุบัน การตรวจสอบป้องกันการลิงก์โดยตรง/CSRF บางตัวจะตรวจสอบ ตั้งค่าด้วย curl -e
การเปลี่ยนเส้นทาง (3xx)
เมื่อเซิร์ฟเวอร์ส่งคืนรหัสสถานะ 301/302/303/307/308 จะบอกให้เบราว์เซอร์เปลี่ยนเส้นทางไปยัง URL ใหม่ curl ไม่ติดตามตามค่าเริ่มต้น เติม -L/--location เพื่อติดตาม
--compressed
ตัวเลือก curl เพิ่มส่วนหัว Accept-Encoding: deflate, gzip โดยอัตโนมัติและแตกไฟล์การตอบกลับอัตโนมัติ หากไม่ตั้งค่า การตอบกลับอาจเป็นข้อมูลบีบอัดที่อ่านไม่ออก
-k/--insecure
ตัวเลือก curl ข้ามการตรวจสอบใบรับรอง HTTPS ใช้สำหรับสภาพแวดล้อมทดสอบใบรับรอง self-signed เท่านั้น ห้ามใช้ในสภาพแวดล้อมการผลิต
fetch API
API คำขอ HTTP JavaScript ดั้งเดิมของเบราว์เซอร์ ส่งคืน Promise รองรับในเบราว์เซอร์สมัยใหม่ทั้งหมด
Axios
ไลบรารี HTTP client ยอดนิยมที่อาศัย Promise ใช้ได้ทั้งเบราว์เซอร์และ Node.js มี JSON serialization อัตโนมัติ, interceptor, การยกเลิก timeout
OkHttp
ไลบรารี HTTP client Java/Android จาก Square มีประสิทธิภาพสูง รองรับ HTTP/2, พูลการเชื่อมต่อ, GZIP โปร่งใส
HttpClient (.NET)
ไคลเอนต์ HTTP ที่แนะนำสำหรับ C#/.NET ในเนมสเปซ System.Net.Http เป็น API มาตรฐานของ .NET Core/.NET 5+
Invoke-RestMethod
cmdlet คำขอ HTTP ในตัวของ PowerShell 3.0+ แยกวิเคราะห์การตอบกลับ JSON/XML เป็นอ็อบเจ็กต์ PowerShell อัตโนมัติ

ตารางเปรียบเทียบตัวเลือก curl ที่ใช้บ่อยกับ 11 ภาษาเป้าหมาย

ค่าที่พบบ่อยของ Content-Type และวิธีใช้ curl

การเปรียบเทียบสามรูปแบบของ Chrome DevTools Copy as cURL

Troubleshooting

เครื่องมือสร้าง Authentication Headerเครื่องมือวิเคราะห์ Cache-Controlเครื่องมือวิเคราะห์ Content-Dispositionเครื่องมือสร้าง CORS Headerเครื่องมือตรวจสอบ CORSCSP Builderตัวแปลง cURL เป็นโค้ดตรวจสอบการแพร่กระจาย DNS ทั่วโลกค้นหา DNSForwarded Header Parserเครื่องมือสร้าง Hreflang TagHSTS AnalyzerHTTP Cookie ParserHTTP Headers CheckerHTTP Request Runnerค้นหารหัสสถานะ HTTPค้นหา IPตัวแปลง IPv4เครื่องมือขยายช่วง IPv4เครื่องมือจัดการที่อยู่ IPv6ตัวแยกวิเคราะห์ส่วนหัว Linkค้นหา MX Recordตรวจสอบพอร์ตสร้างพารามิเตอร์ URLตัวแยกวิเคราะห์ส่วนหัว Rate Limitเครื่องมือตรวจสอบห่วงโซ่การเปลี่ยนเส้นทางสร้าง Robots.txtตรวจสอบ Robots.txtตรวจสอบส่วนหัวความปลอดภัยสร้าง Security.txtตัวแยกวิเคราะห์ Set-Cookieตรวจสอบเครือข่ายเว็บไซต์สร้าง Sitemapตรวจสอบ Sitemapตัวตรวจสอบใบรับรอง SSLเครื่องคำนวณซับเน็ตตัวแยกวิเคราะห์ URLตัวแยกวิเคราะห์ User-Agentตัวสร้างลิงก์ UTMทดสอบ WebSocketWhat Is My IP?ค้นหา WHOIS