cURL ಅನ್ನು Python Requests ಗೆ ಹಂತ ಹಂತವಾಗಿ ಪರಿವರ್ತಿಸಿ

ನೀವು ನಿಮ್ಮ ಬ್ರೌಸರ್ DevTools ನಿಂದ ಒಂದು ರಿಕ್ವೆಸ್ಟ್ ಅನ್ನು cURL ಕಮಾಂಡ್ ಆಗಿ ಕಾಪಿ ಮಾಡಿಕೊಳ್ಳುತ್ತೀರಿ.

ಇದರಿಂದ ನಿಮಗೆ headers, cookies ಮತ್ತು auth tokens ಸಿಗುತ್ತವೆ.

ಆದರೆ ಕೊನೆಗೆ ನಿಮಗೆ 30 ಸಾಲುಗಳ ಗೊಂದಲಮಯವಾದ shell code ಸಿಗುತ್ತದೆ. ನಿಮಗೆ ಬೇಕಿರುವುದು ಸ್ವಚ್ಛವಾದ Python ಕೋಡ್.

cURL ಕಮಾಂಡ್ ಅನ್ನು Python requests ಲೈಬ್ರರಿಗೆ ಮ್ಯಾನುಯಲ್ ಆಗಿ ಹೇಗೆ ಮ್ಯಾಪ್ ಮಾಡುವುದು ಎಂಬುದು ಇಲ್ಲಿದೆ.

  1. Method ಅನ್ನು ನಿರ್ಧರಿಸಿ ನೀವು --data ಅಥವಾ --data-raw ಅನ್ನು ನೋಡಿದರೆ, curl ಡಿಫಾಲ್ಟ್ ಆಗಿ POST ಅನ್ನು ಬಳಸುತ್ತದೆ. -X ಫ್ಲಾಗ್ ಇಲ್ಲದ ಕಾರಣ ಅದು GET ರಿಕ್ವೆಸ್ಟ್ ಎಂದು ಭಾವಿಸಬೇಡಿ.

  2. Headers ಅನ್ನು ನಿರ್ವಹಿಸಿ ಪ್ರತಿಯೊಂದು -H ಫ್ಲಾಗ್ ಒಂದು ಡಿಕশনারನಿಯಲ್ಲಿ (dictionary) ಎಂಟ್ರಿಯಾಗಿ ಬದಲಾಗುತ್ತದೆ. ನೀವು header ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಸ್ಪ್ಲಿಟ್ (split) ಮಾಡುವಾಗ, ಮೊದಲ ಕೊಲನ್ (colon) ಮೇಲೆ ಮಾತ್ರ ಸ್ಪ್ಲಿಟ್ ಮಾಡಿ. URL ಅಥವಾ timestamps ನಂತಹ ಮೌಲ್ಯಗಳು ಕೊಲನ್‌ಗಳನ್ನು ಹೊಂದಿರುತ್ತವೆ. ನೀವು ಪ್ರತಿಯೊಂದು ಕೊಲನ್ ಮೇಲೆ ಸ್ಪ್ಲಿಟ್ ಮಾಡಿದರೆ, ಡೇಟಾ ಹಾಳಾಗುತ್ತದೆ.

  3. Cookies ಅನ್ನು ನಿರ್ವಹಿಸಿ -b ಫ್ಲಾಗ್ ಸೆಮಿಕೋಲನ್‌ನಿಂದ (semicolon) ಪ್ರತ್ಯೇಕಿಸಲ್ಪಟ್ಟ ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ನೀಡುತ್ತದೆ. ಇದನ್ನು ನಿಮ್ಮ headers ಡಿಕশনারಿಯಲ್ಲಿ ಹಾಕಬೇಡಿ. ಬದಲಾಗಿ ಇದನ್ನು cookies ಆರ್ಗ್ಯುಮೆಂಟ್‌ಗೆ ಡಿಕশনারಿಯಾಗಿ ಕಳುಹಿಸಿ. ಇದು ಲೈಬ್ರರಿಯು ಎನ್‌ಕೋಡಿಂಗ್ ಅನ್ನು ನಿರ್ವಹಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ.

  4. JSON vs Data ಬಳಸಿ ಇದು ಸಾಮಾನ್ಯ ತಪ್ಪು. ಕಂಟೆಂಟ್ ಟೈಪ್ (content type) application/json ಆಗಿದ್ದರೆ, json= ಆರ್ಗ್ಯುಮೆಂಟ್ ಬಳಸಿ. ಇದು ನಿಮ್ಮ ಡಿಕশনারಿಯನ್ನು ಸೀರಿಯಲೈಸ್ (serialize) ಮಾಡುತ್ತದೆ ಮತ್ತು ನಿಮಗಾಗಿ ಸರಿಯಾದ ಹೆಡರ್ ಅನ್ನು ಸೆಟ್ ಮಾಡುತ್ತದೆ. ನೀವು data= ಬಳಸಿದರೆ, requests ಫಾರ್ಮ್-ಎನ್‌ಕೋಡಿಂಗ್ (form-encoding) ಅನ್ನು ಬಳಸುತ್ತದೆ. ಇದರಿಂದ API ನಿಮ್ಮ ರಿಕ್ವೆಸ್ಟ್ ಅನ್ನು ತಿರಸ್ಕರಿಸಬಹುದು.

  5. Parameters ಅನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸಿ URL ನಿಂದ ಕ್ವೆರಿ ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು (query string) params ಡಿಕশনারಿಗೆ ವರ್ಗಾಯಿಸಿ. ಇದು ನಿಮ್ಮ ಕೋಡ್ ಅನ್ನು ಓದಲು ಸುಲಭವಾಗಿಸುತ್ತದೆ. ಡಬಲ್-ಎನ್‌ಕೋಡಿಂಗ್ (double-encoding) ಬಗ್ಗೆ ಎಚ್ಚರವಿರಲಿ. URL ಈಗಾಗಲೇ ಎನ್‌ಕೋಡ್ ಆಗಿದ್ದರೆ, ನಿಮ್ಮ ಡಿಕশনারಿಯಲ್ಲಿ ಅದನ್ನು ಮತ್ತೆ ಎನ್‌ಕೋಡ್ ಮಾಡಬೇಡಿ.

ಅಂತಿಮ ಕೋಡ್ ರಚನೆ ಹೀಗಿರುತ್ತದೆ:

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())

ತಪ್ಪಿಸಬೇಕಾದ ಸಾಮಾನ್ಯ ತಪ್ಪುಗಳು:

  • multipart ಅಪ್‌ಲೋಡ್ ಮಾಡುವಾಗ files= ಮತ್ತು data= ಅನ್ನು ಗೊಂದಲ ಮಾಡಿಕೊಳ್ಳುವುದು.
  • ಪ್ರತಿಯೊಂದು ಕೊಲನ್ ಮೇಲೆ ಹೆಡರ್ಸ್‌ಗಳನ್ನು ಸ್ಪ್ಲಿಟ್ ಮಾಡುವುದು.
  • ಕ್ವೆರಿ ಪ್ಯಾರಾಮೀಟರ್‌ಗಳನ್ನು ಡಬಲ್-ಎನ್‌ಕೋಡ್ ಮಾಡುವುದು.

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