ধাপে ধাপে cURL থেকে Python Requests-এ রূপান্তর করুন
আপনি আপনার ব্রাউজার DevTools থেকে একটি রিকোয়েস্ট cURL কমান্ড হিসেবে কপি করেন।
আপনি হেডার (headers), কুকি (cookies) এবং অথ টোকেন (auth tokens) পেয়ে যান।
কিন্তু শেষ পর্যন্ত আপনি ৩০ লাইনের একটি অগোছালো শেল কোড (shell code) পান। আপনি চেয়েছিলেন পরিষ্কার পাইথন (Python) কোড।
নিচে ম্যানুয়ালি একটি cURL কমান্ডকে Python requests লাইব্রেরিতে ম্যাপ করার পদ্ধতি দেওয়া হলো।
১. মেথড (Method) নির্ধারণ করুন
যদি আপনি --data বা --data-raw দেখেন, তবে curl ডিফল্টভাবে POST ব্যবহার করে। শুধুমাত্র -X ফ্ল্যাগ নেই বলে এটিকে GET রিকোয়েস্ট বলে ধরে নেবেন না।
২. হেডার (Headers) হ্যান্ডেল করুন
প্রতিটি -H ফ্ল্যাগ একটি ডিকশনারির (dictionary) এন্ট্রি হিসেবে গণ্য হবে।
যখন আপনি হেডার স্ট্রিংটি স্প্লিট (split) করবেন, তখন শুধুমাত্র প্রথম কোলনের (colon) ওপর ভিত্তি করে স্প্লিট করবেন।
URL বা টাইমস্ট্যাম্পের মতো ভ্যালুগুলোতে কোলন থাকতে পারে। আপনি যদি প্রতিটি কোলনে স্প্লিট করেন, তবে ডেটা নষ্ট হয়ে যাবে।
৩. কুকি (Cookies) ম্যানেজ করুন
-b ফ্ল্যাগটি একটি সেমিকোলন-আলাদা করা (semicolon-separated) স্ট্রিং প্রদান করে।
এটি আপনার হেডার ডিকশনারিতে রাখবেন না।
পরিবর্তে এটিকে cookies আর্গুমেন্টে একটি ডিকশনারি হিসেবে পাস করুন। এতে লাইব্রেরিটি নিজেই এনকোডিং হ্যান্ডেল করতে পারবে।
৪. JSON বনাম Data ব্যবহার করুন
এটি একটি সাধারণ ভুল।
যদি কন্টেন্ট টাইপ (content type) application/json হয়, তবে json= আর্গুমেন্ট ব্যবহার করুন।
এটি আপনার ডিকশনারিকে সিরিয়ালাইজ (serialize) করবে এবং আপনার জন্য সঠিক হেডার সেট করে দেবে।
আপনি যদি data= ব্যবহার করেন, তবে requests ফর্ম-এনকোডিং (form-encoding) ব্যবহার করবে। এর ফলে API আপনার রিকোয়েস্টটি প্রত্যাখ্যান করতে পারে।
৫. প্যারামিটারগুলো পরিষ্কার করুন
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