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ọn | Cách xử lý |
|---|---|
URL / --url | Một URL HTTP hoặc HTTPS đầy đủ |
-X / --request | Phương thức HTTP được chỉ định rõ |
-H / --header | Tên và giá trị; cần kiểm tra header trùng hoặc chỉ thị rỗng |
-d / --data / --data-raw / --data-binary | Body nằm trong lệnh, giữ thứ tự các đối số dữ liệu |
--data-urlencode / -G | Mã hóa giá trị; -G chuyển dữ liệu sang chuỗi truy vấn |
--json | Giữ văn bản JSON và thêm header JSON mặc định |
-u / --user | Basic Auth dạng username:password |
-L / -I / -k | Chuyển hướng, HEAD và xác minh TLS; Fetch không hỗ trợ -k |
-b / -A / -e | Cookie, User-Agent và Referer chịu giới hạn của trình duyệt |
--compressed / -s / -S / -v / -i | Giả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.
