𝗖𝗼𝗻𝘃𝗲𝗿𝘁 𝗖𝗨𝗥𝗟 𝘁𝗼 𝗣𝘆𝘁𝗵𝗼𝗻 𝗥𝗲𝗾𝘂𝗲𝘀𝘁𝘀 𝗦𝘁𝗲𝗽 𝗕𝘆 𝗦𝘁𝗲𝗽
آپ اپنے براؤزر کے DevTools سے ایک ریکویسٹ کو cURL کمانڈ کے طور پر کاپی کرتے ہیں۔
آپ کو ہیڈرز (headers)، کوکیز (cookies) اور آتھ ٹوکنز (auth tokens) مل جاتے ہیں۔
لیکن آخر میں آپ کے پاس 30 لائنوں کا الجھا ہوا شیل کوڈ (shell code) بچ جاتا ہے۔ جبکہ آپ کو صاف ستھرا Python کوڈ چاہیے تھا۔
یہاں بتایا گیا ہے کہ آپ دستی طور پر (manually) ایک cURL کمانڈ کو Python requests لائبریری میں کیسے تبدیل کر سکتے ہیں۔
میتھڈ (Method) کا تعین کریں اگر آپ کو
--dataیا--data-rawنظر آئے، تو curl ڈیفالٹ طور پر POST استعمال کرتا ہے۔ صرف اس لیے کہ-Xفلیگ موجود نہیں ہے، یہ فرض نہ کریں کہ یہ GET ریکویسٹ ہے۔ہیڈرز (Headers) کو ہینڈل کریں ہر
-Hفلیگ ڈکشنری (dictionary) میں ایک انٹری بن جاتا ہے۔ جب آپ ہیڈر اسٹرنگ کو سپلٹ (split) کریں، تو صرف پہلے کولن (colon) پر سپلٹ کریں۔ URL یا ٹائم اسٹیمپ (timestamps) جیسی ویلیوز میں کولنز ہوتے ہیں۔ اگر آپ ہر کولن پر سپلٹ کریں گے، تو ڈیٹا خراب ہو جائے گا۔کوکیز (Cookies) کا انتظام کریں
-bفلیگ سیمیکولن (semicolon) سے الگ کی گئی ایک اسٹرنگ فراہم کرتا ہے۔ اسے اپنی ہیڈرز ڈکشنری میں نہ ڈالیں۔ اس کے بجائے اسےcookiesآرگومنٹ میں ایک ڈکشنری کے طور پر پاس کریں۔ اس سے لائبریری خود انکوڈنگ (encoding) سنبھال لے گی۔JSON بمقابلہ Data کا استعمال یہ ایک عام غلطی ہے۔ اگر کنٹینٹ ٹائپ (content type)
application/jsonہے، توjson=آرگومنٹ استعمال کریں۔ یہ آپ کی ڈکشنری کو سیریلائز (serialize) کر دیتا ہے اور آپ کے لیے درست ہیڈر سیٹ کر دیتا ہے۔ اگر آپdata=استعمال کریں گے، توrequestsفارم انکوڈنگ (form-encoding) استعمال کرے گا۔ اس کی وجہ سے API آپ کی ریکویسٹ مسترد کر دے گی۔پیرامیٹرز (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