Từ kiểm thử API đến mã ứng dụng

Chuyển curl sang mã Python, JavaScript hoặc PHP

Đưa yêu cầu API đã kiểm tra vào dự án. Dán lệnh curl, chọn ngôn ngữ rồi đối chiếu dữ liệu và lưu ý về môi trường chạy trước khi dùng mã.

curlmã yêu cầu
Xử lý trong trình duyệt
01

Dán một yêu cầu HTTP gồm header và body. Hỗ trợ dấu nháy POSIX và nối dòng bằng dấu gạch chéo ngược.

POSTexample.com3 header
02
async function main() {
  const response = await fetch("https://example.com/api/messages", {
    method: "POST",
    headers: [
      ["Authorization", "Bearer YOUR_TOKEN"],
      ["Content-Type", "application/json"],
      ["Accept", "application/json"]
    ],
    body: "{\"message\":\"Hello from curl\",\"enabled\":true}",
    redirect: "manual",
    credentials: "omit"
  });
  console.log(response.status);
  console.log(await response.text());
}

main().catch(console.error);

Fetch trên trình duyệt hoặc Node.js 18+

Trước khi chạy

  • Công cụ không gửi yêu cầu. Mã chứa URL, header và thông tin xác thực đã nhập; kiểm tra trước khi chia sẻ.
  • Fetch trên trình duyệt chịu quy tắc CORS. Cookie không tự gửi với credentials: omit; cấu hình thông tin xác thực khi cần. Chuyển hướng thủ công có thể trả về phản hồi opaque.

Không cần tài khoản, không thực thi lệnh. Nội dung được xử lý trong trình duyệt.

Tái sử dụng yêu cầu từ bước gỡ lỗi

Lệnh curl lấy từ tài liệu API hoặc DevTools giúp tái hiện một yêu cầu cụ thể. Khi đưa vào script hay ứng dụng, bạn cần viết lại cách truyền URL, header và body theo thư viện đang dùng. Công cụ này tạo đoạn mã để đối chiếu, đồng thời chỉ rõ những khác biệt cần kiểm tra khi chạy.

Cách chuyển curl sang Python hoặc JavaScript

Dán một lệnh curl có URL HTTP hoặc HTTPS đầy đủ. Chọn ngôn ngữ, kiểm tra phương thức và nội dung gửi đi, rồi sao chép hoặc tải tệp. Việc chuyển đổi diễn ra trong trình duyệt và không gọi API.

Giữ dấu nháy quanh giá trị có khoảng trắng. Khi sao chép từ DevTools, chọn dạng bash. Thay biến shell và phép thay thế lệnh bằng giá trị cụ thể trước khi dán. Công cụ không đọc tệp, không tự chuyển tải tệp lên hay biểu mẫu multipart.

Chọn thư viện phù hợp với nơi chạy mã

Python dùng Requests, cài bằng pip install requests, và gửi body dạng byte UTF-8. PHP cần bật phần mở rộng cURL. JavaScript dùng Fetch trên trình duyệt hoặc phiên bản Node.js có hỗ trợ.

Văn bản JSON được giữ nguyên, không tuần tự hóa lại số lớn, khoảng trắng hay khóa trùng lặp. Đây không phải bước kiểm tra cú pháp JSON. Hãy bổ sung timeout và xử lý lỗi cho ứng dụng; Requests có thể dùng cấu hình proxy và .netrc từ môi trường.

Vì sao curl chạy được nhưng Fetch bị chặn?

Trình duyệt áp dụng CORS và tự quản lý một số header. Các header đó được bỏ khỏi mã Fetch và nêu tên trong phần lưu ý. Mã dùng credentials: omit nên không tự gửi cookie của phiên trình duyệt. Nếu cần kiểm soát các header này ở máy chủ, hãy cân nhắc Python hoặc PHP.

Không có -L, Fetch xử lý chuyển hướng thủ công và có thể nhận phản hồi opaque trong trình duyệt. Khi bật chuyển hướng, việc đổi phương thức và chuyển tiếp thông tin xác thực tùy thuộc thư viện. Kiểm tra chuỗi chuyển hướng trong môi trường thực tế.

Giữ nhiều giá trị cho cùng một trường biểu mẫu

Cả hai giá trị tag đều được giữ trong body. --data-urlencode mã hóa khoảng trắng, sau đó Requests nhận chuỗi đã chuẩn bị. Cách này tránh mất một giá trị khi đưa các khóa trùng tên vào dictionary.

curl 'https://example.com/api/tags' --data-urlencode 'tag=cloud hosting' --data-urlencode 'tag=linux'
import requests

url = "https://example.com/api/tags"
headers = {
    "Content-Type": "application/x-www-form-urlencoded"
}
body = "tag=cloud%20hosting&tag=linux".encode("utf-8")

response = requests.request(
    method="POST",
    url=url,
    headers=headers,
    data=body,
    allow_redirects=False,
    verify=True,
)
print(response.status_code)
print(response.text)

Các tùy chọn curl được chuyển thế nào?

Tùy chọnCách xử lý
URL / --urlMột URL HTTP hoặc HTTPS đầy đủ
-X / --requestPhương thức HTTP được chỉ định rõ
-H / --headerTên và giá trị; cần kiểm tra header trùng hoặc chỉ thị rỗng
-d / --data / --data-raw / --data-binaryBody nằm trong lệnh, giữ thứ tự các đối số dữ liệu
--data-urlencode / -GMã hóa giá trị; -G chuyển dữ liệu sang chuỗi truy vấn
--jsonGiữ văn bản JSON và thêm header JSON mặc định
-u / --userBasic Auth dạng username:password
-L / -I / -kChuyển hướng, HEAD và xác minh TLS; Fetch không hỗ trợ -k
-b / -A / -eCookie, User-Agent và Referer chịu giới hạn của trình duyệt
--compressed / -s / -S / -v / -iGiải nén bằng thư viện đích; không mô phỏng cách hiển thị của terminal

Câu hỏi khi chuyển curl

Dán lệnh có gửi yêu cầu đến máy chủ không?

Không. Công cụ chỉ phân tích văn bản và tạo mã trong trình duyệt, không thử URL hay thông tin xác thực. Yêu cầu được gửi khi bạn tự chạy mã.

Có dùng được Copy as cURL từ DevTools không?

Có, với một yêu cầu theo cú pháp POSIX và các tùy chọn được hỗ trợ. Chọn bản bash. Tùy chọn không hỗ trợ sẽ báo lỗi thay vì bị bỏ qua.

Số lớn trong JSON có bị đổi không?

Body được giữ dưới dạng văn bản, không chuyển số sang kiểu số JavaScript trong bước này. Khoảng trắng và khóa trùng cũng không bị viết lại. --json không kiểm tra JSON hợp lệ.

Tại sao mã Fetch thiếu một số header?

Một số header do trình duyệt quản lý nên bị bỏ và liệt kê trong lưu ý. Content-Length được thư viện HTTP tính lại. Nếu header đó bắt buộc, hãy xem đầu ra Python hoặc PHP.

Cần kiểm tra gì trước khi chia sẻ tệp?

Token, mật khẩu và cookie đã nhập có thể còn trong mã. Kiểm tra trước khi chia sẻ hoặc đưa vào kho mã; bổ sung cách quản lý thông tin xác thực, timeout và xử lý lỗi cho dự án.

Tài liệu tham khảo: curl · Requests · Fetch