Mõni rakendus soovib kuju IP:port. Teine vajab URL-i, mis algab http:// või socks5://. Brauseri seadetes on aadress ja port sageli eri väljadel. Sama lõpp-punkt võib seega esineda mitmes vormingus, ilma et aadress muutuks.

IPv4-kirje

Oletame, et HTTP-puhverserverite loend annab HTTP-puhverserveri näitena 203.0.113.10:8080.

Rakendus küsibSisesta
Host või IP203.0.113.10
Port8080
HTTP-puhverserveri URLhttp://203.0.113.10:8080

Ära lisa porti kaks korda. Kui rakendusel on juba pordiväli, võib 203.0.113.10:8080 hostiväljale sisestamine panna selle proovima kogu stringi hostinimena lahendada. Samuti ära lisa skeemi väljale, mis ootab sõnaselgelt ainult IP-aadressi.

Skeem peab teenusega sobima. Enne aadressi teisendamist vali HTTP või SOCKS5 kliendi toe järgi. HTTP-lõpp-punkti ette socks5:// kirjutamine muudab kliendi saadetavat, kuid ei lülita serveris SOCKS5 sisse.

IPv6 vajab URL-is nurksulge

IPv6-aadress sisaldab juba kooloneid, mistõttu URL ümbritseb aadressi enne pordi lisamist nurksulgudega:

http://[2001:db8::10]:8080
socks5://[2001:db8::10]:1080

Ilma sulgudeta on aadressi ja pordi piir ebaselge. Eraldi väljadega rakendus ootab tavaliselt hostina 2001:db8::10 ja pordina 8080; järgi selle sisendvormingut. Mõlemad siinsed aadressid on dokumentatsiooninäited, mitte töötavad puhverserverid.

Parsi URL-e, ära tükelda iga kooloni kohalt

Väike Pythoni skript saab standardse URL-parseriga töödelda IPv4-URL-e ja sulgudega IPv6-URL-e:

from urllib.parse import urlsplit

proxy = urlsplit("http://[2001:db8::10]:8080")
print(proxy.scheme)
print(proxy.hostname)
print(proxy.port)

Atribuut hostname tagastab aadressi ilma sulgudeta. Algse stringi tükeldamine iga kooloni kohalt rikuks selle näite. Päris importijas lükka tagasi ka puuduvad hostid, toetamata skeemid ja pordid väljaspool vahemikku 1–65535. URL-i parsimine annab selle osad; see ei tõesta teenuse olemasolu.

Kui loendis on kasutajanimi ja parool

Levinud URL-i kuju on http://username:password@host:port. Mandaatides olevad märgid nagu @, # ja / vajavad korrektset URL-kodeerimist. Kui klient pakub mandaatide jaoks eraldi välju, on neid tavaliselt lihtsam kasutada kui URL-i käsitsi koostada.

Enne koolonitega eraldatud mandaadistringi teisendamist kontrolli pakkuja algset vormingut. Neljal koolonitega eraldatud väljal pole universaalset tähendust ning parool ise võib sisaldada koolonit. Lihtsatele IP:port-ridadele mõeldud parser ei tohiks vaikselt teist vormingut ära arvata.

Seotud artiklid