အကောင့်ဝင်အချက်အလက် မှန်သော်လည်း @ သို့မဟုတ် # ပါသော 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 တွင် မထည့်ပါနှင့်။

ဆက်စပ်ဆောင်းပါးများ