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

آپ اپنے براؤزر کے DevTools سے ایک ریکویسٹ کو cURL کمانڈ کے طور پر کاپی کرتے ہیں۔

آپ کو ہیڈرز (headers)، کوکیز (cookies) اور آتھ ٹوکنز (auth tokens) مل جاتے ہیں۔

لیکن آخر میں آپ کے پاس 30 لائنوں کا الجھا ہوا شیل کوڈ (shell code) بچ جاتا ہے۔ جبکہ آپ کو صاف ستھرا Python کوڈ چاہیے تھا۔

یہاں بتایا گیا ہے کہ آپ دستی طور پر (manually) ایک cURL کمانڈ کو Python requests لائبریری میں کیسے تبدیل کر سکتے ہیں۔

  1. میتھڈ (Method) کا تعین کریں اگر آپ کو --data یا --data-raw نظر آئے، تو curl ڈیفالٹ طور پر POST استعمال کرتا ہے۔ صرف اس لیے کہ -X فلیگ موجود نہیں ہے، یہ فرض نہ کریں کہ یہ GET ریکویسٹ ہے۔

  2. ہیڈرز (Headers) کو ہینڈل کریں ہر -H فلیگ ڈکشنری (dictionary) میں ایک انٹری بن جاتا ہے۔ جب آپ ہیڈر اسٹرنگ کو سپلٹ (split) کریں، تو صرف پہلے کولن (colon) پر سپلٹ کریں۔ URL یا ٹائم اسٹیمپ (timestamps) جیسی ویلیوز میں کولنز ہوتے ہیں۔ اگر آپ ہر کولن پر سپلٹ کریں گے، تو ڈیٹا خراب ہو جائے گا۔

  3. کوکیز (Cookies) کا انتظام کریں -b فلیگ سیمیکولن (semicolon) سے الگ کی گئی ایک اسٹرنگ فراہم کرتا ہے۔ اسے اپنی ہیڈرز ڈکشنری میں نہ ڈالیں۔ اس کے بجائے اسے cookies آرگومنٹ میں ایک ڈکشنری کے طور پر پاس کریں۔ اس سے لائبریری خود انکوڈنگ (encoding) سنبھال لے گی۔

  4. JSON بمقابلہ 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())

بچنے کے لیے عام جال (Common traps):

  • multipart uploads کے دوران files= اور data= کو مکس کرنا۔
  • ہر کولن پر ہیڈرز کو سپلٹ کرنا۔
  • کوئری پیرامیٹرز کی ڈبل انکوڈنگ کرنا۔

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