@ ან # შემცველ პაროლს ხელით აწყობილი პროქსის URL-ის დაზიანება შეუძლია, მაშინაც, როცა შესვლის მონაცემები სწორია. ამ სიმბოლოებს URL-ში უკვე აქვთ მნიშვნელობა, ამიტომ კლიენტმა პაროლის ნაწილი შეიძლება ჰოსტის სახელად ან ფრაგმენტად გაარჩიოს.

შესვლის მონაცემების ორი ველი ცალ-ცალკე დააკოდირეთ

ეს მაგალითი URL-ის სტრუქტურულ გამყოფებს ინარჩუნებს და მხოლოდ მომხმარებლის სახელსა და პაროლს აკოდირებს:

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"
)

გამოიყენეთ რეალური ბოლო წერტილი და შესვლის მონაცემები. ნაჩვენები მისამართი სადოკუმენტაციო მაგალითია. ცარიელი safe არგუმენტი მნიშვნელოვანია: quote ჩვეულებრივ დახრილ ხაზს უცვლელად ტოვებს, მაგრამ ამ შესვლის ველში ის უნდა დაკოდირდეს.

მთელ პროქსის URL-ს ნუ დააკოდირებთ. სქემის გამყოფებისა და შესვლის მონაცემებსა და ჰოსტს შორის @-ის დაკოდირება ანგრევს სტრუქტურას, რომლის შენარჩუნებაც გსურდათ. უკვე დაკოდირებული პაროლის მეორედ დაკოდირებასაც მოერიდეთ.

შედეგი Requests-თან გამოიყენეთ

import requests

response = requests.get(
    "https://example.com/",
    proxies={"http": proxy_url, "https": proxy_url},
    timeout=(5, 15),
)
response.raise_for_status()

თუ მოთხოვნა კვლავ მარცხდება, შეამოწმეთ, პროქსი შესვლას უარყოფს თუ კლიენტი უფრო ადრე, გარჩევის ან დაკავშირებისას ჩავარდა. 407 ავთენტიკაციის მოთხოვნა და არასწორი URL სხვადასხვა შეცდომაა.

HTTPX-ს ავთენტიკაციის ცალკე შენახვა შეუძლია

HTTPX-ის Proxy ობიექტს ბოლო წერტილისა და შესვლის მონაცემების ცალკე არგუმენტებად მიღება შეუძლია:

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 ნაწილის ხელით აწყობას თავიდან იცილებთ. ეს მონაცემებს პროქსის კავშირისგან დამოუკიდებლად არ შიფრავს და არ ირჩევს ავთენტიკაციის მეთოდს, რომელსაც ყველა სერვისი უჭერს მხარს.

თუ უფასო სია მხოლოდ IP-სა და პორტს იძლევა, ამ მაგალითში ნაგულისხმევი შესვლის მონაცემები არ არის. ავთენტიკაცია მხოლოდ მაშინ გამოიყენეთ, როცა ოპერატორი ნამდვილად გაძლევთ ანგარიშს. შესვლის მონაცემებიანი URL-ები საერთო ჟურნალებში ან საწყის ფაილებში არ ჩაწეროთ.

დაკავშირებული სტატიები