Menu

Chuyển đổi cURL

Chuyển mọi lệnh curl thành fetch, axios, Python requests, Go, PHP và nhiều hơn nữa.

Tác giả Nethanel Bar, Co-founder & CEO

Cập nhật lần cuối

Sẵn sàng học code thật sự?

Coddy dạy bạn bằng cách viết code thật ngay trên trình duyệt: bài học tương tác, phản hồi tức thì và AI hỗ trợ khi bạn bị kẹt.

Công cụ chuyển đổi cURL là gì?

Công cụ chuyển đổi cURL biến một lệnh curl, định dạng mà mọi tài liệu API, bản xuất từ Postman và trợ lý AI đều dùng, thành code dán vào dùng ngay cho ngôn ngữ lập trình bạn thật sự dùng. Header, query string, body JSON, upload multipart, basic auth và cookie đều được chuyển sang, nên bạn không phải tự dịch request bằng tay.

curl là cách phổ biến nhất để mô tả một HTTP request, nhưng bạn hiếm khi *chạy* curl trong môi trường production. Bạn chạy fetch của JavaScript, requests của Python, net/http của Go hoặc bất cứ thứ gì stack của bạn dùng. Công cụ này lấp khoảng trống đó: dán curl, nhấn một tab, sao chép code.

Mọi thứ chạy cục bộ trong trình duyệt. Lệnh curl, header và token của bạn không bao giờ rời khỏi máy, rất hữu ích khi bạn dán lệnh có chứa bearer token hay cookie phiên thật.

Bạn học được gì khi chuyển đổi

  • Các cờ của curl tương ứng với những khái niệm cụ thể trong mọi HTTP client: -H là header của request, -d là body, -X là phương thức, -u là basic auth, -F là một trường form multipart.
  • Nếu curl thấy có body (-d, --data, -F) mà không có -X, nó mặc định dùng POST, cũng là mặc định của phần lớn client, nên khi không chỉ định -X thì đầu ra vẫn là POST.
  • Body JSON khác với body form. Content-Type: application/json nghĩa là body được gửi nguyên văn; application/x-www-form-urlencoded nghĩa là các cặp khóa/giá trị được nối với nhau bằng &.
  • -G chuyển body thành query string cho request GET. Đầu ra phản ánh điều đó: bạn sẽ thấy params / query được điền và không có body nào được gửi.

Cách chuyển curl sang code từng bước

  1. Dán lệnh curl

    Thả toàn bộ lệnh, kể cả các ký tự nối dòng \ khi sao chép từ tài liệu, vào ô nhập. Bộ phân tích tự động chuẩn hóa dấu nháy cong và ký hiệu dấu nhắc của PowerShell.

  2. Chọn ngôn ngữ đích

    Các tab gồm JavaScript fetch, TypeScript, Node axios, Python requests, Python httpx, Go, PHP, Ruby, Java HttpClient, C# HttpClient, HTTPie và PowerShell. Chuyển tab không tốn gì: việc phân tích chỉ chạy một lần.

  3. Kiểm tra request đã phân tích

    Mở bảng *Request đã phân tích* để xác nhận phương thức, URL, header, loại body và các tùy chọn như insecure hay follow redirects đã được chuyển sang đúng như bạn mong đợi.

  4. Sao chép và chỉnh phần xác thực

    Sao chép code được tạo vào dự án. Nếu lệnh curl có bearer token hoặc cookie, hãy thay giá trị cứng bằng biến môi trường trước khi commit.

Tra cứu nhanh các cờ cURL

Các cờ mà công cụ này hiểu và chúng tương ứng với gì trong code được tạo.

CờÝ nghĩaVí dụ
-X, --requestPhương thức HTTP-X POST
-H, --headerHeader của request (dùng lặp lại được)-H 'Accept: application/json'
-d, --dataBody của request, mặc định được mã hóa URL-d 'name=Ada&age=30'
--data-rawBody không mở rộng @file--data-raw '$body'
--data-urlencodeMã hóa phần trăm một phần của body--data-urlencode 'q=hello world'
-F, --formTrường form multipart (dùng @file cho tệp)-F 'avatar=@photo.jpg'
-u, --userBasic auth → Authorization: Basic …-u alice:s3cret
-G, --getChuyển body thành query string, gửi GET-G -d 'q=ada'
-b, --cookieHeader Cookie-b 'session=abc'
-A, --user-agentHeader User-Agent-A 'MyApp/1.0'
-L, --locationĐi theo chuyển hướng 3xx-L
-k, --insecureBỏ qua xác minh TLS (chỉ khi phát triển!)-k
--compressedChấp nhận response gzip/deflate/br--compressed
--max-timeThời gian chờ tối đa cho cả request, tính bằng giây--max-time 30

Ví dụ chuyển đổi cURL

GET với query string và header xác thực

curl
curl 'https://api.example.com/v1/lessons?limit=20&track=python' \  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.demo'
JavaScript (fetch)
const response = await fetch('https://api.example.com/v1/lessons?limit=20&track=python', {  method: 'GET',  headers: {    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiJ9.demo'  }});const data = await response.json();

Tham số query trong URL được giữ nguyên trong URL: công cụ không tách chúng ra thành đối tượng params riêng cho fetch. Với axios và requests, bạn sẽ thấy chúng được đưa vào params / params= cho dễ đọc.

POST một body JSON

curl
curl 'https://api.example.com/v1/users' \  -H 'Content-Type: application/json' \  --data-raw '{"name":"Ada","age":36}'
Python (requests)
import requests
headers = {    'Content-Type': 'application/json',}json_data = {"name":"Ada","age":36}
response = requests.post('https://api.example.com/v1/users', headers=headers, json=json_data)response.raise_for_status()

Khi body phân tích được thành JSON và Content-Type là application/json, công cụ tạo json= cho requests và data: (đối tượng đã phân tích) cho axios. Chuỗi gốc được giữ nguyên khi JSON.parse thất bại, không bao giờ bị viết lại.

Upload tệp multipart

curl
curl 'https://api.example.com/upload' \  -F 'caption=Hello' \  -F 'photo=@./avatar.jpg'
Python (requests)
import requests
files = {    'caption': (None, 'Hello'),    'photo': open('./avatar.jpg', 'rb'),}
response = requests.post('https://api.example.com/upload', files=files)response.raise_for_status()

-F field=@file trở thành một lần upload tệp thật (open('…', 'rb') trong Python, FormData.append trong JavaScript). Các trường -F thông thường trở thành giá trị form bình thường. Bản xem trước trên trình duyệt hiển thị chỗ giữ chỗ TODO cho dữ liệu tệp mà bạn cần cung cấp khi chạy.

Basic auth và cookie

curl
curl 'https://api.example.com/me' \  -u alice:s3cret \  -b 'session=2f9a; theme=dark'
JavaScript (fetch)
const response = await fetch('https://api.example.com/me', {  method: 'GET',  headers: {    'Authorization': 'Basic YWxpY2U6czNjcmV0',    'Cookie': 'session=2f9a; theme=dark'  }});

Basic auth được gộp thành một header Authorization duy nhất. Cookie được nối bằng ; và gửi trong một header Cookie, đúng như cách curl gửi đi trên đường truyền.

Lỗi thường gặp khi chuyển đổi curl

  • Dán lệnh curl có dấu nháy cong (', ', ", ") từ một bài blog. Trông chúng giống dấu nháy nhưng lại làm hỏng việc phân tích của shell. Công cụ có chuẩn hóa chúng, nhưng nếu được hãy sao chép lệnh gốc.
  • Để lại -k (--insecure) trong production. Nó tắt việc xác minh chứng chỉ TLS: ổn khi phát triển cục bộ, nguy hiểm với lưu lượng thật.
  • Quên rằng --data-raw và --data hoạt động khác nhau: --data mã hóa URL đầu vào. Dùng --data-raw cho body JSON có chứa @ hoặc &.
  • Dán lệnh curl.exe của Windows mà không đổi ký tự nối dòng ^ thành \. Công cụ có xử lý việc này, nhưng bộ phân tích rất khắt khe với dấu nháy: hãy kiểm tra kỹ ranh giới các chuỗi.
  • Sao chép bearer token hoặc cookie vào hệ thống quản lý phiên bản sau khi chuyển đổi. Hãy đổi chúng thành biến môi trường (process.env.API_TOKEN, os.environ['API_TOKEN']) trước khi commit.

Câu hỏi thường gặp về chuyển đổi cURL

Công cụ hỗ trợ những ngôn ngữ nào?

Mười hai ngôn ngữ đích có sẵn: JavaScript (fetch), TypeScript (fetch), Node (axios), Python (requests), Python (httpx), Go (net/http), PHP (curl), Ruby (Net::HTTP), Java (HttpClient), C# (HttpClient), HTTPie và PowerShell (Invoke-RestMethod). Tất cả đều được tạo từ cùng một kết quả phân tích, nên chuyển tab là có ngay.

Công cụ có xử lý upload multipart và cờ -F không?
Có. -F field=value trở thành trường form thông thường, -F file=@path trở thành lần upload tệp thật dùng FormData (JS), files= (Python), CURLFile (PHP), v.v. Đường dẫn tệp hiện dưới dạng chỗ giữ chỗ TODO mà bạn cần nối với File, Buffer hoặc stream khi chạy.
Lệnh curl của tôi có bị gửi lên máy chủ không?

Không. Bộ phân tích và mọi trình tạo code đều chạy trong trình duyệt. Bearer token, cookie và body của request không bao giờ rời khỏi máy bạn, và mặc định chúng tôi còn che chúng đi trong bản xem trước *Request đã phân tích*.

Vì sao lệnh curl trên Windows của tôi trông khác?
curl.exe trên Windows (và CMD/PowerShell) dùng ^ hoặc dấu backtick ` để nối dòng và có thể đặt dấu nháy cho chuỗi theo cách khác. Công cụ chuẩn hóa các kiểu Windows phổ biến, nhưng nếu kết quả dán trông sai, hãy thử sao chép lệnh thành một dòng.
Công cụ có hỗ trợ request GraphQL không?
Có. Một request GraphQL chỉ là một POST với body JSON chứa query và variables. Dán lệnh curl, công cụ sẽ tạo một POST JSON thông thường bằng ngôn ngữ đích của bạn. Xử lý cấu trúc response ({ data, errors }) giống như với bất kỳ GraphQL client nào.
Có thể dán lệnh curl xuất từ Postman không?
Có. Bản xuất *Code → cURL* của Postman được hỗ trợ đầy đủ, kể cả định dạng nhiều dòng với \. Lệnh curl tạo bằng *Copy as cURL* trong DevTools của Chrome và Firefox cũng vậy.
fetch hay axios: nên chọn đầu ra nào?

Dùng fetch nếu dự án của bạn đã có sẵn (nó đi kèm trình duyệt và Node hiện đại). Dùng axios nếu bạn cần tự động phân tích JSON, interceptor cho request, thử lại hoặc sự kiện tiến độ, những tính năng mà fetch không có sẵn.

Tìm hiểu thêm

Công cụ lập trình khác

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu