𝗖𝗼𝗻𝘃𝗲𝗿𝘁 𝗖𝗨𝗥𝗟 𝘁𝗼 𝗣𝘆𝘁𝗵𝗼𝗻 𝗥𝗲𝗾𝘂𝗲𝘀𝘁𝘀 𝗦𝘁𝗲𝗽 𝗕𝘆 𝗦𝘁𝗲𝗽

നിങ്ങളുടെ ബ്രൗസർ DevTools-ൽ നിന്ന് ഒരു റിക്വസ്റ്റ് cURL കമാൻഡ് ആയി നിങ്ങൾ കോപ്പി ചെയ്യുന്നു.

ഇതിലൂടെ നിങ്ങൾക്ക് ഹെഡറുകൾ (headers), കുക്കികൾ (cookies), ഓത്ത് ടോക്കണുകൾ (auth tokens) എന്നിവ ലഭിക്കുന്നു.

എന്നാൽ അവസാനം നിങ്ങൾക്ക് ലഭിക്കുന്നത് 30 വരികളുള്ള കുഴഞ്ഞുമറിഞ്ഞ ഷെൽ കോഡായിരിക്കും (shell code). നിങ്ങൾക്ക് വേണ്ടത് വൃത്തിയുള്ള ഒരു Python കോഡാണ്.

ഒരു cURL കമാൻഡിനെ എങ്ങനെ നേരിട്ട് (manually) Python requests ലൈബ്രറിയിലേക്ക് മാറ്റാം എന്ന് താഴെ നൽകുന്നു.

  1. മെത്തേഡ് (Method) നിശ്ചയിക്കുക --data അല്ലെങ്കിൽ --data-raw എന്നിവ കാണുന്നുണ്ടെങ്കിൽ, curl ഡിഫോൾട്ട് ആയി POST ആണ് ഉപയോഗിക്കുന്നത്. -X ഫ്ലാഗ് ഇല്ല എന്നതുകൊണ്ട് മാത്രം അത് ഒരു GET റിക്വസ്റ്റ് ആണെന്ന് കരുതരുത്.

  2. ഹെഡറുകൾ (Headers) കൈകാര്യം ചെയ്യുക ഓരോ -H ഫ്ലാഗും ഒരു ഡിക്ഷണറിയിലെ (dictionary) ഒരു എൻട്രിയായി മാറും. ഹെഡർ സ്ട്രിംഗ് സ്പ്ലിറ്റ് (split) ചെയ്യുമ്പോൾ ആദ്യത്തെ കോലൻ (colon) ഉപയോഗിച്ച് മാത്രം സ്പ്ലിറ്റ് ചെയ്യുക. URL-കളോ ടൈംസ്റ്റാമ്പുകളോ പോലുള്ള വാല്യൂകളിൽ കോലനുകൾ ഉണ്ടാകാം. എല്ലാ കോലനുകളിലും സ്പ്ലിറ്റ് ചെയ്താൽ ഡാറ്റ തെറ്റായിപ്പോകും.

  3. കുക്കികൾ (Cookies) നിയന്ത്രിക്കുക -b ഫ്ലാഗ് സെമി കോളൻ (semicolon) ഉപയോഗിച്ച് വേർതിരിച്ച ഒരു സ്ട്രിംഗ് നൽകുന്നു. ഇത് നിങ്ങളുടെ ഹെഡർ ഡിക്ഷണറിയിൽ ഉൾപ്പെടുത്തരുത്. പകരം, ഇത് cookies ആർഗ്യുമെന്റിലേക്ക് ഒരു ഡിക്ഷണറി ആയി നൽകുക. ഇത് എൻകോഡിംഗ് (encoding) ലൈബ്രറി തന്നെ കൈകാര്യം ചെയ്യാൻ സഹായിക്കും.

  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 uploads) സമയത്ത് files= ഉം data= ഉം തമ്മിൽ മാറിപ്പോകുന്നത്.
  • ഹെഡറുകൾ എല്ലാ കോലനുകളിലും സ്പ്ലിറ്റ് ചെയ്യുന്നത്.
  • ക്വറി പാരാമീറ്ററുകൾ ഡബിൾ എൻകോഡ് ചെയ്യുന്നത്.

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