HTTPX-এ proxy ও mounts দিয়ে প্রক্সির পথ বেছে নেওয়া
HTTPX-এর proxy ও transport mounts সঠিক স্কিম, স্পষ্ট পরিবেশ আচরণ এবং আলাদা সংযোগ ও পড়ার সময়সীমাসহ ব্যবহার করুন।
এক এন্ডপয়েন্টকে ক্লায়েন্টের অনুরোধ সামলাতে হলে proxy= ব্যবহার করুন। গন্তব্য স্কিমের জন্য আলাদা পথ লাগলে mounts= ব্যবহার করুন। উদাহরণগুলো HTTPX-এর এই ইন্টারফেস ব্যবহার করে; পুরোনো proxies= API-র প্রজেক্টে সংস্করণ অনুযায়ী কনফিগারেশন চাই।
এক এন্ডপয়েন্ট
import httpx
timeout = httpx.Timeout(15.0, connect=5.0)
with httpx.Client(
proxy="http://127.0.0.1:8080",
trust_env=False,
timeout=timeout,
) as client:
response = client.get("https://example.com/")
response.raise_for_status()
print(response.status_code)
স্থানীয় লিসেনারকে চালু HTTP প্রক্সি দিয়ে বদলান। HTTP প্রক্সির তালিকার বিকল্পও নিজের গন্তব্যে পরীক্ষা করতে হবে। HTTPS গন্তব্য CONNECT দিয়ে এই http:// এন্ডপয়েন্ট ব্যবহার করতে পারে। স্কিম https:// করলে প্রক্সি পর্যন্ত TLS চাওয়া হয়; লিসেনার ও ক্লায়েন্ট দুটিকে তা সমর্থন করতে হবে।
গন্তব্য স্কিম অনুযায়ী আলাদা পথ
import httpx
mounts = {
"http://": httpx.HTTPTransport(
proxy="http://127.0.0.1:8080",
trust_env=False,
),
"https://": httpx.HTTPTransport(
proxy="http://127.0.0.1:8081",
trust_env=False,
),
}
with httpx.Client(
mounts=mounts,
trust_env=False,
timeout=httpx.Timeout(15.0, connect=5.0),
) as client:
response = client.get("https://example.com/")
response.raise_for_status()
print(response.status_code)
Mount-এর কী গন্তব্য URL-এর সঙ্গে মেলে। এখানে HTTP গন্তব্য পোর্ট 8080, HTTPS গন্তব্য 8081 বেছে নেয়। প্রক্সির মান লিসেনারের নিজস্ব প্রোটোকল বোঝায়, তাই HTTPS mount-এ http:// প্রক্সি থাকা ঠিক। নিজের এন্ডপয়েন্ট দিয়ে উভয় গন্তব্য স্কিম পরীক্ষা করুন।
দুটি পদ্ধতিই ক্লায়েন্টে এবং দেওয়া থাকলে transport-এ trust_env=False সেট করে। অন্যথায় HTTPX ডিফল্টভাবে প্রক্সি ও সার্টিফিকেটের পরিবেশ চলক পড়ে। ডিপ্লয়মেন্ট সেগুলোর ওপর নির্ভর করলে শনাক্তকরণ চালু রাখুন অথবা পথ ও আস্থা স্পষ্ট কনফিগার করুন। ব্যক্তিগত আস্থার জন্য HTTPX সংস্করণের সমর্থিত TLS context ও CA কনফিগারেশন নিন; গন্তব্য যাচাই চালু রাখুন। HTTPS প্রক্সির আস্থা গন্তব্যের আস্থা থেকে আলাদা হতে পারে।
httpx.Timeout(15.0, connect=5.0) সংযোগের সময়সীমা বদলে অন্য কনফিগার করা উপাদানগুলোকে ডিফল্ট মান দেয়। পড়া, লেখা ও pool-এর অপেক্ষার আলাদা সীমা আছে; পনেরো সেকেন্ড মোট অতিক্রান্ত সময়ের শেষসীমা নয়। Pool timeout মানে অন্য কাজ উপলব্ধ সংযোগ ধরে রেখেছে, এমনও হতে পারে। প্রক্সি নাগালের বাইরে বলে ধরার আগে ক্লায়েন্ট ও streaming response ঠিকমতো বন্ধ করুন।