Chuyển đổi cURL sang Python Requests từng bước một

Bạn sao chép một yêu cầu từ DevTools của trình duyệt dưới dạng lệnh cURL.

Bạn có được các headers, cookies và auth tokens.

Nhưng kết quả bạn nhận được là 30 dòng mã shell lộn xộn. Trong khi cái bạn muốn là mã Python sạch sẽ.

Dưới đây là cách bạn ánh xạ thủ công một lệnh cURL sang thư viện Python requests.

  1. Xác định phương thức (Method) Nếu bạn thấy --data hoặc --data-raw, curl sẽ mặc định sử dụng POST. Đừng giả định đó là một yêu cầu GET chỉ vì thiếu cờ -X.

  2. Xử lý Headers Mỗi cờ -H sẽ trở thành một mục trong một dictionary. Khi bạn tách chuỗi header, chỉ tách ở dấu hai chấm đầu tiên. Các giá trị như URL hoặc timestamp có chứa dấu hai chấm. Nếu bạn tách ở mọi dấu hai chấm, bạn sẽ làm hỏng dữ liệu.

  3. Quản lý Cookies Cờ -b cung cấp một chuỗi được phân tách bằng dấu chấm phẩy. Đừng đưa chuỗi này vào dictionary headers của bạn. Thay vào đó, hãy truyền nó vào đối số cookies dưới dạng một dictionary. Điều này cho phép thư viện tự xử lý việc mã hóa (encoding).

  4. Sử dụng JSON thay vì Data Đây là một lỗi phổ biến. Nếu content type là application/json, hãy sử dụng đối số json=. Việc này sẽ tuần tự hóa (serialize) dictionary của bạn và thiết lập header chính xác cho bạn. Nếu bạn sử dụng data=, requests sẽ sử dụng form-encoding. Điều này sẽ khiến API từ chối yêu cầu của bạn.

  5. Làm sạch các tham số (Parameters) Chuyển query string từ URL vào một dictionary params. Điều này giúp mã của bạn dễ đọc hơn. Hãy cẩn thận với việc mã hóa kép (double-encoding). Nếu URL đã được mã hóa, đừng mã hóa nó một lần nữa trong dictionary của bạn.

Cấu trúc mã cuối cùng trông như thế này:

import requests

url = "https://api.example.com/v2/search"
params = {"lang": "en", "page": "2"}
headers = {
    "accept": "application/json",
    "authorization": "Bearer token_here",
    "referer": "https://app.example.com/dashboard",
}
cookies = {"session": "abc123"}
payload = {"q": "nginx"}

resp = requests.post(
    url,
    params=params,
    headers=headers,
    cookies=cookies,
    json=payload,
)

resp.raise_for_status()
print(resp.json())

Các bẫy thường gặp cần tránh:

  • Nhầm lẫn giữa files=data= trong quá trình upload multipart.
  • Tách headers ở mọi dấu hai chấm.
  • Mã hóa kép các tham số truy vấn (query parameters).

Nguồn: https://dev.to/wanfeng/from-browser-curl-to-clean-python-requests-code-step-by-step-25oh