ပရောက်စီ Password များရှိ အထူးစာလုံးများ
@၊ colon၊ slash နှင့် # တို့က URL မပျက်စေရန် ပရောက်စီ username နှင့် password ကို သီးခြား encode လုပ်ပါ။
အကောင့်ဝင်အချက်အလက် မှန်သော်လည်း @ သို့မဟုတ် # ပါသော password က လက်ဖြင့်ဆက်ထားသည့် ပရောက်စီ URL ကို ပျက်စေနိုင်သည်။ ထိုစာလုံးများတွင် URL အတွင်း သီးခြားအဓိပ္ပာယ် ရှိပြီးဖြစ်သောကြောင့် client က password တစ်ပိုင်းကို hostname သို့မဟုတ် fragment အဖြစ် ဖတ်နိုင်သည်။
အကောင့်ဝင်အချက်အလက် field နှစ်ခုကို သီးခြား encode လုပ်ပါ
ဤနမူနာက URL တည်ဆောက်ပုံ ခွဲခြားစာလုံးများကို မပြောင်းဘဲ username နှင့် password ကိုသာ encode လုပ်သည်—
from urllib.parse import quote
username = "user@team"
password = "p:a/ss#?"
proxy_url = (
"http://"
+ quote(username, safe="")
+ ":"
+ quote(password, safe="")
+ "@203.0.113.10:8080"
)
သင့်တကယ့် endpoint နှင့် အကောင့်ဝင်အချက်အလက်ကို သုံးပါ။ ပြထားသောလိပ်စာသည် စာရွက်စာတမ်းနမူနာဖြစ်သည်။ ဗလာ safe argument က အရေးကြီးသည်။ quote က ပုံမှန်အားဖြင့် slash ကို escape မလုပ်ဘဲထားသော်လည်း ဤအကောင့်ဝင် field အတွင်း slash ကို encode လုပ်ရမည်။
ပရောက်စီ URL တစ်ခုလုံးကို encode မလုပ်ပါနှင့်။ scheme ခွဲခြားစာလုံးနှင့် အကောင့်ဝင်အချက်အလက်၊ host ကြား @ ကို encode လုပ်ခြင်းက ထိန်းသိမ်းလိုသောပုံစံကို ဖျက်သည်။ encode လုပ်ထားပြီးသော password ကို ဒုတိယအကြိမ် မလုပ်ပါနှင့်။
ရလဒ်ကို Requests နှင့် သုံးပါ
import requests
response = requests.get(
"https://example.com/",
proxies={"http": proxy_url, "https": proxy_url},
timeout=(5, 15),
)
response.raise_for_status()
request ဆက်ပျက်ကွက်လျှင် ပရောက်စီက login ငြင်းသလား၊ client က အစောပိုင်း parsing သို့မဟုတ် ချိတ်ဆက်ချိန်၌ ပျက်ကွက်သလား စစ်ပါ။ 407 authentication တောင်းဆိုချက်နှင့် မမှန်သော URL သည် မတူညီသောအမှားများဖြစ်သည်။
HTTPX က authentication ကို သီးခြားထားနိုင်သည်
HTTPX Proxy object က endpoint နှင့် အကောင့်ဝင်အချက်အလက်ကို သီးခြား argument များအဖြစ် လက်ခံနိုင်သည်—
import httpx
proxy = httpx.Proxy(
"http://203.0.113.10:8080",
auth=("user@team", "p:a/ss#?"),
)
with httpx.Client(proxy=proxy, trust_env=False, timeout=15) as client:
response = client.get("https://example.com/")
response.raise_for_status()
ထို့ကြောင့် userinfo အပိုင်းကို ကိုယ်တိုင် တည်ဆောက်ရန်မလိုပါ။ ၎င်းက အကောင့်ဝင်အချက်အလက်ကို ပရောက်စီချိတ်ဆက်မှုမှ သီးခြား encrypt မလုပ်သကဲ့သို့ service အားလုံးပံ့ပိုးသော authentication နည်းလမ်းကိုလည်း မရွေးပါ။
အခမဲ့စာရင်းက IP နှင့် port သာပေးလျှင် ဤနမူနာသည် default အကောင့်ဝင်အချက်အလက် မပေးပါ။ operator က အကောင့်အမှန်တကယ်ပေးမှသာ authentication သုံးပါ။ အကောင့်ဝင်အချက်အလက်ပါသော URL များကို မျှဝေသုံး log နှင့် source file တွင် မထည့်ပါနှင့်။