urllib.parse — Dela upp URL:er i komponenter¶
Källkod: Lib/urllib/parse.py
Denna modul definierar ett standardgränssnitt för att bryta upp URL-strängar (Uniform Resource Locator) i komponenter (adresseringsschema, nätverksplats, sökväg etc.), för att kombinera komponenterna tillbaka till en URL-sträng och för att konvertera en ”relativ URL” till en absolut URL givet en ”bas-URL”
Modulen har utformats så att den överensstämmer med Internet RFC om Relative Uniform Resource Locators. Den stöder följande URL-scheman: file, ftp, gopher, hdl, http, https, imap, itms-services, mailto, mms, news, nntp, prospero, rsync, rtsp, rtsps, rtspu, ftp, shttp,sip, sips, news, svn, svn+ssh, telnet, wais,ws, wsss.
Inkluderingen av URL-schemat itms-services kan förhindra att en app passerar Apples granskningsprocess för App Store för macOS och iOS App Stores. Hantering för itms-services-schema tas alltid bort på iOS; på macOS kan det tas bort om CPython har byggts med --with-app-store-compliance-alternativet.
Modulen urllib.parse definierar funktioner som faller inom två breda kategorier: URL-parsning och URL-citering. Dessa behandlas i detalj i följande avsnitt.
Funktionerna i denna modul använder den föråldrade termen netloc (eller net_loc), som introducerades i RFC 1808. Denna term har dock föråldrats av RFC 3986, som introducerade termen authority som dess ersättare. Användningen av netloc fortsätter för bakåtkompatibilitet.
Parsning av URL¶
URL-parsingfunktionerna fokuserar på att dela upp en URL-sträng i dess komponenter eller på att kombinera URL-komponenter till en URL-sträng.
- urllib.parse.urlparse(urlstring, scheme='', allow_fragments=True)¶
Analyserar en URL i sex komponenter och returnerar en named tuple med 6 objekt. Detta motsvarar den allmänna strukturen i en URL:
scheme://netloc/path;parameters?query#fragment. Varje tuple-element är en sträng, eventuellt tom. Komponenterna är inte uppdelade i mindre delar (t.ex. är nätverksplatsen en enda sträng) och % escapes är inte expanderade. De avgränsningstecken som visas ovan ingår inte i resultatet, med undantag för ett inledande snedstreck i komponenten path, som behålls om det finns. Till exempel>>> from urllib.parse import urlparse >>> urlparse("scheme://netloc/path;parameters?query#fragment") ParseResult(scheme='scheme', netloc='netloc', path='/path;parameters', params='', query='query', fragment='fragment') >>> o = urlparse("http://docs.python.org:80/3/library/urllib.parse.html?" ... "highlight=params#url-parsing") >>> o ParseResult(scheme='http', netloc='docs.python.org:80', path='/3/library/urllib.parse.html', params='', query='highlight=params', fragment='url-parsing') >>> o.scheme 'http' >>> o.netloc 'docs.python.org:80' >>> o.hostname 'docs.python.org' >>> o.port 80 >>> o._replace(fragment="").geturl() 'http://docs.python.org:80/3/library/urllib.parse.html?highlight=params'
I enlighet med syntaxspecifikationerna i RFC 1808, känner urlparse igen en netloc endast om den introduceras korrekt av ’//’. Annars antas indata vara en relativ URL och därmed börja med en sökvägskomponent.
>>> from urllib.parse import urlparse >>> urlparse('//www.cwi.nl:80/%7Eguido/Python.html') ParseResult(scheme='', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='') >>> urlparse('www.cwi.nl/%7Eguido/Python.html') ParseResult(scheme='', netloc='', path='www.cwi.nl/%7Eguido/Python.html', params='', query='', fragment='') >>> urlparse('help/Python.html') ParseResult(scheme='', netloc='', path='help/Python.html', params='', query='', fragment='')
Argumentet scheme anger standardadresseringsschemat, som endast ska användas om URL:en inte anger något. Det bör vara av samma typ (text eller bytes) som urlstring, förutom att standardvärdet
''alltid tillåts och automatiskt konverteras tillb''om så är lämpligt.Om argumentet allow_fragments är false identifieras inte fragmentidentifierare. Istället analyseras de som en del av sökvägen, parametrarna eller frågekomponenten, och
fragmentsätts till den tomma strängen i returvärdet.Returvärdet är en named tuple, vilket innebär att dess objekt kan nås via index eller som namngivna attribut, vilka är:
Attribut
Index
Värde
Värde om inte närvarande
scheme0
Specificering av URL-schema
schema parameter
netloc1
Nätverkslokaliseringsdel
tom sträng
sökväg2
Hierarkisk väg
tom sträng
params3
Parametrar för sista banelementet
tom sträng
query4
Fråga komponent
tom sträng
fragment5
Identifierare för fragment
tom sträng
användarnamnAnvändarnamn
lösenordLösenord
hostnameVärdnamn (gemener)
portPortnummer som heltal, om det finns
Att läsa attributet
portkommer att ge upphov till ettValueErrorom en ogiltig port anges i URL:en. Se avsnitt Resultat av strukturerad parsning för mer information om resultatobjektet.Omatchade hakparenteser i attributet
netlockommer att ge upphov till ettValueError.Tecken i attributet
netlocsom sönderdelas enligt NFKC-normalisering (som används av IDNA-kodningen) till något av/,?,#,@eller:kommer att ge upphov till ettValueError. Om URL:en bryts ned innan den analyseras kommer inget fel att uppstå.Precis som för alla namngivna tupler har subklassen några ytterligare metoder och attribut som är särskilt användbara. En sådan metod är
_replace(). Metoden_replace()returnerar ett nytt ParseResult-objekt som ersätter angivna fält med nya värden.>>> from urllib.parse import urlparse >>> u = urlparse('//www.cwi.nl:80/%7Eguido/Python.html') >>> u ParseResult(scheme='', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='') >>> u._replace(scheme='http') ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='')
Varning
urlparse()utför inte validering. Se URL parsing security för mer information.Ändrad i version 3.2: Funktioner för analys av IPv6-URL:er har lagts till.
Ändrad i version 3.3: Fragmentet analyseras nu för alla URL-scheman (om inte allow_fragments är false), i enlighet med RFC 3986. Tidigare fanns det en lista över scheman som stödde fragment.
Ändrad i version 3.6: Portnummer utanför intervallet ger nu upphov till
ValueError, istället för att returneraNone.Ändrad i version 3.8: Tecken som påverkar netloc-parsning under NFKC-normalisering kommer nu att ge upphov till
ValueError.
- urllib.parse.parse_qs(qs, keep_blank_values=False, strict_parsing=False, encoding='utf-8', errors='replace', max_num_fields=None, separator='&')¶
Analyserar en frågesträng som anges som ett strängargument (data av typen application/x-www-form-urlencoded). Data returneras som en ordbok. Nycklarna i ordboken är de unika namnen på frågevariablerna och värdena är listor med värden för varje namn.
Det valfria argumentet keep_blank_values är en flagga som anger om tomma värden i procentkodade frågor ska behandlas som tomma strängar. Ett true-värde anger att tomma värden ska behållas som tomma strängar. Standardvärdet false anger att tomma värden ska ignoreras och behandlas som om de inte fanns med.
Det valfria argumentet strict_parsing är en flagga som anger vad som ska göras med parsingfel. Om false (standard) ignoreras felen i tysthet. Om true, ger felen upphov till ett
ValueErrorundantag.De valfria parametrarna encoding och errors anger hur procentkodade sekvenser ska avkodas till Unicode-tecken, vilket accepteras av metoden
bytes.decode().Det valfria argumentet max_num_fields är det maximala antalet fält som ska läsas. Om det är inställt, kastas ett
ValueErrorom det finns fler än max_num_fields fält lästa.Det valfria argumentet separator är den symbol som ska användas för att separera frågeargumenten. Standardvärdet är
&.Använd funktionen
urllib.parse.urlencode()(med parameterndoseqsatt tillTrue) för att konvertera sådana ordlistor till frågesträngar.Ändrad i version 3.2: Lägg till parametrarna encoding och errors.
Ändrad i version 3.8: Lagt till parametern max_num_fields.
Ändrad i version 3.10: Lagt till parametern separator med standardvärdet
&. Python-versioner tidigare än Python 3.10 tillät användning av både;och&som separator för frågeparametrar. Detta har ändrats så att endast en enda separatornyckel tillåts, med&som standardseparator.Föråldrad sedan version 3.14: Att acceptera objekt med falska värden (som
0och[]) förutom tomma strängar och byte-liknande objekt ochNoneär nu föråldrat.
- urllib.parse.parse_qsl(qs, keep_blank_values=False, strict_parsing=False, encoding='utf-8', errors='replace', max_num_fields=None, separator='&')¶
Analyserar en frågesträng som anges som ett strängargument (data av typen application/x-www-form-urlencoded). Data returneras som en lista med namn- och värdepar.
Det valfria argumentet keep_blank_values är en flagga som anger om tomma värden i procentkodade frågor ska behandlas som tomma strängar. Ett true-värde anger att tomma värden ska behållas som tomma strängar. Standardvärdet false anger att tomma värden ska ignoreras och behandlas som om de inte fanns med.
Det valfria argumentet strict_parsing är en flagga som anger vad som ska göras med parsingfel. Om false (standard) ignoreras felen i tysthet. Om true, ger felen upphov till ett
ValueErrorundantag.De valfria parametrarna encoding och errors anger hur procentkodade sekvenser ska avkodas till Unicode-tecken, vilket accepteras av metoden
bytes.decode().Det valfria argumentet max_num_fields är det maximala antalet fält som ska läsas. Om det är inställt, kastas ett
ValueErrorom det finns fler än max_num_fields fält lästa.Det valfria argumentet separator är den symbol som ska användas för att separera frågeargumenten. Standardvärdet är
&.Använd funktionen
urllib.parse.urlencode()för att konvertera sådana listor med par till frågesträngar.Ändrad i version 3.2: Lägg till parametrarna encoding och errors.
Ändrad i version 3.8: Lagt till parametern max_num_fields.
Ändrad i version 3.10: Lagt till parametern separator med standardvärdet
&. Python-versioner tidigare än Python 3.10 tillät användning av både;och&som separator för frågeparametrar. Detta har ändrats så att endast en enda separatornyckel tillåts, med&som standardseparator.
- urllib.parse.urlunparse(parts)¶
Konstruerar en URL från en tupel som returneras av
urlparse(). Argumentet parts kan vara en valfri iterabel med sex punkter. Detta kan resultera i en något annorlunda, men likvärdig URL, om den URL som analyserades ursprungligen hade onödiga avgränsare (till exempel en?med en tom fråga; RFC anger att dessa är likvärdiga).
- urllib.parse.urlsplit(urlstring, scheme='', allow_fragments=True)¶
Detta liknar
urlparse(), men delar inte upp parametrarna från URL:en. Detta bör i allmänhet användas istället förurlparse()om man vill använda den nyare URL-syntaxen som tillåter att parametrar tillämpas på varje segment av sökväg-delen av URL:en (se RFC 2396). En separat funktion behövs för att separera sökvägssegmenten och parametrarna. Denna funktion returnerar en 5-punkts named tuple:(adresseringsschema, nätverksplats, sökväg, fråga, fragmentidentifierare).
Returvärdet är en named tuple, vars objekt kan nås via index eller som namngivna attribut:
Attribut
Index
Värde
Värde om inte närvarande
scheme0
Specificering av URL-schema
schema parameter
netloc1
Nätverkslokaliseringsdel
tom sträng
sökväg2
Hierarkisk väg
tom sträng
query3
Fråga komponent
tom sträng
fragment4
Identifierare för fragment
tom sträng
användarnamnAnvändarnamn
lösenordLösenord
hostnameVärdnamn (gemener)
portPortnummer som heltal, om det finns
Att läsa attributet
portkommer att ge upphov till ettValueErrorom en ogiltig port anges i URL:en. Se avsnitt Resultat av strukturerad parsning för mer information om resultatobjektet.Omatchade hakparenteser i attributet
netlockommer att ge upphov till ettValueError.Tecken i attributet
netlocsom sönderdelas enligt NFKC-normalisering (som används av IDNA-kodningen) till något av/,?,#,@eller:kommer att ge upphov till ettValueError. Om URL:en bryts ned innan den analyseras kommer inget fel att uppstå.Enligt en del av WHATWG spec som uppdaterar RFC 3986, tas ledande C0-kontroll- och mellanslagstecken bort från URL:en. tecknen ”n”, ”r” och ”tab” tas bort från URL:en på alla positioner.
Varning
urlsplit()utför inte validering. Se URL parsing security för detaljer.Ändrad i version 3.6: Portnummer utanför intervallet ger nu upphov till
ValueError, istället för att returneraNone.Ändrad i version 3.8: Tecken som påverkar netloc-parsning under NFKC-normalisering kommer nu att ge upphov till
ValueError.Ändrad i version 3.10: ASCII-tecken för nya rader och tabbar tas bort från URL:en.
Ändrad i version 3.12: Ledande WHATWG C0-kontroll- och mellanslagstecken tas bort från URL:en.
- urllib.parse.urlunsplit(parts)¶
Kombinerar elementen i en tupel som returneras av
urlsplit()till en komplett URL som en sträng. Argumentet parts kan vara en valfri iterabel med fem element. Detta kan resultera i en något annorlunda, men likvärdig URL, om den URL som analyserades ursprungligen hade onödiga avgränsare (till exempel ett ? med en tom fråga; RFC anger att dessa är likvärdiga).
- urllib.parse.urljoin(base, url, allow_fragments=True)¶
Konstruera en fullständig (”absolut”) URL genom att kombinera en ”bas-URL” (base) med en annan URL (url). Informellt används komponenter i bas-URL:en, i synnerhet adresseringsschemat, nätverksplatsen och (en del av) sökvägen, för att tillhandahålla komponenter som saknas i den relativa URL:en. Till exempel
>>> from urllib.parse import urljoin >>> urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html') 'http://www.cwi.nl/%7Eguido/FAQ.html'
Argumentet allow_fragments har samma betydelse och standard som för
urlparse().Anteckning
Om url är en absolut URL (dvs. den börjar med
//ellerscheme://) kommer url:s värdnamn och/eller schema att finnas med i resultatet. Till exempel>>> urljoin('http://www.cwi.nl/%7Eguido/Python.html', ... '//www.python.org/%7Eguido') 'http://www.python.org/%7Eguido'
Om du inte vill ha det beteendet, förbehandla url med
urlsplit()ochurlunsplit(), och ta bort eventuella scheme- och netloc-delar.Varning
Eftersom en absolut URL kan skickas som
url-parameter är det i allmänhet inte säkert att användaurljoinmed en angriparstyrdurl. Till exempel iurljoin("https://website.com/users/", användarnamn), omanvändarnamnkan innehålla en absolut URL, kommer resultatet avurljoinatt vara den absoluta URL:en.Ändrad i version 3.5: Beteendet uppdaterat för att matcha semantiken som definieras i RFC 3986.
- urllib.parse.urldefrag(url)¶
Om url innehåller en fragmentidentifierare, returneras en modifierad version av url utan fragmentidentifierare, och fragmentidentifieraren som en separat sträng. Om det inte finns någon fragmentidentifierare i url, returneras url omodifierad och en tom sträng.
Returvärdet är en named tuple, vars objekt kan nås via index eller som namngivna attribut:
Attribut
Index
Värde
Värde om inte närvarande
url0
URL utan fragment
tom sträng
fragment1
Identifierare för fragment
tom sträng
Se avsnitt Resultat av strukturerad parsning för mer information om resultatobjektet.
Ändrad i version 3.2: Resultatet är ett strukturerat objekt snarare än en enkel 2-tupel.
- urllib.parse.unwrap(url)¶
Extrahera webbadressen från en omsluten URL (dvs. en sträng formaterad som
<URL:scheme://host/path>,<scheme://host/path>,URL:scheme://host/pathellerscheme://host/path). Om url inte är en omsluten URL returneras den utan ändringar.
Säkerhet för URL-parsning¶
API:erna urlsplit() och urlparse() utför inte validering av indata. De kanske inte ger upphov till fel på indata som andra program anser vara ogiltiga. De kan också lyckas med vissa inmatningar som kanske inte betraktas som URL:er någon annanstans. Deras syfte är praktisk funktionalitet snarare än renhet.
Istället för att skapa ett undantag vid ovanlig inmatning kan de istället returnera vissa komponentdelar som tomma strängar. Eller så kan komponenterna innehålla mer än de kanske borde.
Vi rekommenderar att användare av dessa API:er där värdena kan användas var som helst med säkerhetsimplikationer kodar defensivt. Gör lite verifiering i din kod innan du litar på en returnerad komponentdel. Är det där schemat vettigt? Är det en vettig väg? Är det något konstigt med det där hostname? etc.
Vad som utgör en URL är inte universellt väldefinierat. Olika applikationer har olika behov och önskade begränsningar. Exempelvis beskriver den levande WHATWG spec vad webbklienter som vänder sig till användare, t.ex. en webbläsare, kräver. Medan RFC 3986 är mer allmän. Dessa funktioner innehåller vissa aspekter av båda, men kan inte påstås överensstämma med någon av dem. API:erna och den befintliga användarkoden med förväntningar på specifika beteenden är äldre än båda standarderna, vilket gör att vi måste vara mycket försiktiga med att ändra API-beteenden.
Parsning av ASCII-kodade byte¶
URL-parsingfunktionerna var ursprungligen utformade för att endast fungera på teckensträngar. I praktiken är det användbart att kunna manipulera korrekt citerade och kodade webbadresser som sekvenser av ASCII-bytes. Därför använder alla URL-parsingfunktioner i den här modulen bytes och bytearray-objekt utöver str-objekt.
Om str-data skickas in kommer resultatet också att innehålla endast str-data. Om bytes eller bytearray data skickas in, kommer resultatet endast att innehålla bytes data.
Försök att blanda str-data med bytes eller bytearray i ett enda funktionsanrop kommer att resultera i att TypeError tas upp, medan försök att skicka in icke-ASCII-bytevärden kommer att utlösa UnicodeDecodeError.
För att underlätta konvertering av resultatobjekt mellan str och bytes innehåller alla returvärden från URL-parsingfunktioner antingen en encode()-metod (när resultatet innehåller str-data) eller en decode()-metod (när resultatet innehåller bytes-data). Dessa metoder har samma signaturer som motsvarande metoder str och bytes (förutom att standardkodningen är 'ascii' i stället för 'utf-8'). Var och en producerar ett värde av motsvarande typ som innehåller antingen bytes-data (för encode()-metoder) eller str-data (för decode()-metoder).
Program som behöver arbeta med URL-adresser som kan vara felaktigt citerade och som kan innehålla icke-ASCII-data måste göra sin egen avkodning från bytes till tecken innan URL-parsningsmetoderna anropas.
Det beteende som beskrivs i detta avsnitt gäller endast för URL-parsing-funktionerna. URL-citeringsfunktionerna använder sina egna regler när de producerar eller konsumerar byte-sekvenser, vilket beskrivs i dokumentationen för de enskilda URL-citeringsfunktionerna.
Ändrad i version 3.2: URL-parsingfunktioner accepterar nu ASCII-kodade byte-sekvenser
Resultat av strukturerad parsning¶
Resultatobjekten från funktionerna urlparse(), urlsplit() och urldefrag() är subklasser av typen tuple. Dessa subklasser lägger till de attribut som anges i dokumentationen för dessa funktioner, det stöd för kodning och avkodning som beskrivs i föregående avsnitt, samt ytterligare en metod:
- urllib.parse.SplitResult.geturl()¶
Returnerar den omkombinerade versionen av den ursprungliga URL:en som en sträng. Denna kan skilja sig från den ursprungliga URL:en genom att schemat kan normaliseras till gemener och tomma komponenter kan tas bort. Specifikt kommer tomma parametrar, frågor och fragmentidentifierare att tas bort.
För
urldefrag()-resultat kommer endast tomma fragmentidentifierare att tas bort. Förurlsplit()ochurlparse()resultat, kommer alla noterade ändringar att göras i URL:en som returneras av denna metod.Resultatet av denna metod förblir oförändrat om det skickas tillbaka genom den ursprungliga parsingfunktionen:
>>> from urllib.parse import urlsplit >>> url = 'HTTP://www.Python.org/doc/#' >>> r1 = urlsplit(url) >>> r1.geturl() 'http://www.Python.org/doc/' >>> r2 = urlsplit(r1.geturl()) >>> r2.geturl() 'http://www.Python.org/doc/'
Följande klasser innehåller implementeringar av strukturerade parseresultat när de används på str-objekt:
- class urllib.parse.DefragResult(url, fragment)¶
Konkret klass för
urldefrag()-resultat som innehållerstr-data. Metodenencode()returnerar en instans avDefragResultBytes.Tillagd i version 3.2.
- class urllib.parse.ParseResult(scheme, netloc, path, params, query, fragment)¶
Konkret klass för
urlparse()-resultat som innehållerstr-data. Metodenencode()returnerar en instans avParseResultBytes.
- class urllib.parse.SplitResult(scheme, netloc, path, query, fragment)¶
Konkret klass för
urlsplit()-resultat som innehållerstr-data. Metodenencode()returnerar en instans avSplitResultBytes.
Följande klasser innehåller implementeringar av analysresultaten när de används på objekt av typen bytes eller bytearray:
- class urllib.parse.DefragResultBytes(url, fragment)¶
Konkret klass för
urldefrag()-resultat som innehållerbytes-data. Metodendecode()returnerar en instans avDefragResult.Tillagd i version 3.2.
- class urllib.parse.ParseResultBytes(scheme, netloc, path, params, query, fragment)¶
Konkret klass för
urlparse()-resultat som innehållerbytes-data. Metodendecode()returnerar en instans avParseResult.Tillagd i version 3.2.
- class urllib.parse.SplitResultBytes(scheme, netloc, path, query, fragment)¶
Konkret klass för
urlsplit()-resultat som innehållerbytes-data. Metodendecode()returnerar en instans avSplitResult.Tillagd i version 3.2.
URL-citering¶
URL-citeringsfunktionerna fokuserar på att ta programdata och göra dem säkra för användning som URL-komponenter genom att citera specialtecken och på lämpligt sätt koda icke-ASCII-text. De stöder också reversering av dessa operationer för att återskapa originaldata från innehållet i en URL-komponent om den uppgiften inte redan täcks av URL-parsingfunktionerna ovan.
- urllib.parse.quote(string, safe='/', encoding=None, errors=None)¶
Ersätt specialtecken i string med hjälp av
%xxescape. Bokstäver, siffror och tecknen'_.-~'citeras aldrig. Som standard är den här funktionen avsedd för att citera sökvägsavsnittet i en URL. Den valfria parametern safe anger ytterligare ASCII-tecken som inte ska citeras — dess standardvärde är'/'.string kan vara antingen ett
str- eller ettbytes-objekt.Ändrad i version 3.7: Flyttad från RFC 2396 till RFC 3986 för citering av URL-strängar. ”~” ingår nu i uppsättningen av oreserverade tecken.
De valfria parametrarna encoding och errors anger hur icke-ASCII-tecken ska hanteras, vilket accepteras av metoden
str.encode(). encoding är som standard'utf-8'. errors är som standard'strict', vilket innebär att tecken som inte stöds ger upphov till ettUnicodeEncodeError. encoding och errors får inte anges om string är enbytes, eller om ettTypeErroruppstår.Observera att
quote(string, safe, encoding, errors)är likvärdigt medquote_from_bytes(string.encode(encoding, errors), safe).Exempel:
quote('/El Niño/')ger'/El%20Ni%C3%B1o/'.
- urllib.parse.quote_plus(string, safe='', encoding=None, errors=None)¶
Som
quote(), men ersätter även mellanslag med plustecken, vilket krävs för att citera HTML-formulärvärden när man bygger upp en frågesträng som ska ingå i en URL. Plustecken i den ursprungliga strängen escapas om de inte ingår i safe. Det har inte heller safe som standard till'/'.Exempel:
quote_plus('/El Niño/')ger'%2FEl+Ni%C3%B1o%2F'.
- urllib.parse.quote_from_bytes(bytes, safe='/')¶
Som
quote(), men accepterar ettbytes-objekt i stället för ettstr, och utför inte kodning av sträng till byte.Exempel:
quote_from_bytes(b'a&\xef')ger'a%26%EF'.
- urllib.parse.unquote(string, encoding='utf-8', errors='replace')¶
Ersätt
%xxescapes med deras motsvarighet i form av enstaka tecken. De valfria parametrarna encoding och errors anger hur procentkodade sekvenser ska avkodas till Unicode-tecken, vilket accepteras av metodenbytes.decode().string kan vara antingen ett
str- eller ettbytes-objekt.encoding standardvärdet är
'utf-8'. errors har'replace'som standard, vilket innebär att ogiltiga sekvenser ersätts med ett platshållartecken.Exempel:
unquote('/El%20Ni%C3%B1o/')ger'/El Niño/'.Ändrad i version 3.9: string-parametern stöder bytes- och str-objekt (tidigare endast str).
- urllib.parse.unquote_plus(string, encoding='utf-8', errors='replace')¶
Som
unquote(), men ersätter även plustecken med mellanslag, vilket krävs för att avcitera HTML-formulärvärden.string måste vara en
str.Exempel:
unquote_plus('/El+Ni%C3%B1o/')ger'/El Niño/'.
- urllib.parse.unquote_to_bytes(string)¶
Ersätt
%xxescapes med deras motsvarighet i en oktett, och returnera ettbytes-objekt.string kan vara antingen ett
str- eller ettbytes-objekt.Om det är en
strkodas oavkortade icke-ASCII-tecken i string till UTF-8-byte.Exempel:
unquote_to_bytes('a%26%EF')gerb'a&\xef'.
- urllib.parse.urlencode(query, doseq=False, safe='', encoding=None, errors=None, quote_via=quote_plus)¶
Konverterar ett mappningsobjekt eller en sekvens av tuples med två element, som kan innehålla
str- ellerbytes-objekt, till en procentkodad ASCII-textsträng. Om den resulterande strängen ska användas som data för POST-operation med funktionenurlopen(), bör den kodas till bytes, annars resulterar det i ettTypeError.Den resulterande strängen är en serie par av
nyckel=värdeåtskilda av'&'-tecken, där både nyckel och värde citeras med hjälp av funktionen quote_via. Som standard användsquote_plus()för att citera värdena, vilket innebär att mellanslag citeras som ett'+'-tecken och att ’/’-tecken kodas som%2F, vilket följer standarden för GET-begäranden (application/x-www-form-urlencoded). En alternativ funktion som kan skickas som quote_via ärquote(), som kodar mellanslag som%20och inte kodar ’/’-tecken. För maximal kontroll över vad som citeras, användquoteoch ange ett värde för safe.När en sekvens av tupler med två element används som query-argument är det första elementet i varje tupel en nyckel och det andra ett värde. Värdeelementet i sig kan vara en sekvens och i så fall, om den valfria parametern doseq utvärderas till
True, genereras individuellakey=value-par åtskilda av'&'för varje element i värdesekvensen för nyckeln. Ordningen på parametrarna i den kodade strängen kommer att överensstämma med ordningen på parametertuplarna i sekvensen.Parametrarna safe, encoding och errors skickas vidare till quote_via (parametrarna encoding och errors skickas bara vidare när ett frågeelement är en
str).För att vända denna kodningsprocess tillhandahålls
parse_qs()ochparse_qsl()i denna modul för att analysera frågesträngar till Python-datastrukturer.Se urllib examples för att ta reda på hur metoden
urllib.parse.urlencode()kan användas för att generera frågesträngen för en URL eller data för en POST-begäran.Ändrad i version 3.2: query stöder bytes och strängobjekt.
Ändrad i version 3.5: Lagt till parametern quote_via.
Föråldrad sedan version 3.14: Att acceptera objekt med falska värden (som
0och[]) förutom tomma strängar och byte-liknande objekt ochNoneär nu föråldrat.
Se även
- WHATWG - URL Levnadsstandard
Arbetsgrupp för URL-standarden som definierar URL:er, domäner, IP-adresser, det applikation/x-www-form-urlencoded-formatet och deras API.
- RFC 3986 - Enhetliga resursidentifierare
Detta är den nuvarande standarden (STD66). Alla ändringar av urllib.parse-modulen bör överensstämma med denna. Vissa avvikelser kan observeras, som mestadels är för bakåtkompatibilitet och för vissa de facto parsing-krav som vanligtvis observeras i större webbläsare.
- RFC 2732 - Format för bokstavliga IPv6-adresser i URL:er.
Här anges kraven på analys av IPv6-URL:er.
- RFC 2396 - Enhetliga resursidentifierare (URI): Generisk syntax
Dokument som beskriver de generiska syntaktiska kraven för både Uniform Resource Names (URN) och Uniform Resource Locators (URL).
- RFC 2368 - URL-schema för mailto.
Parsing-krav för mailto URL-system.
- RFC 1808 - Relativa sökvägar för enhetliga resurser
Denna begäran om kommentarer innehåller reglerna för hur man sammanfogar en absolut och en relativ URL, inklusive ett stort antal ”onormala exempel” som styr behandlingen av gränsfall.
- RFC 1738 - Uniform Resource Locators (URL)
Här anges den formella syntaxen och semantiken för absoluta URL:er.