urllib3 este o bibliotecă Python HTTP cu gruparea conexiunilor thread-safe și sprijin fișier mesaj.
Repere:
& Nbsp; * Re-folosi aceeași conexiune socket pentru mai multe cereri (HTTPConnectionPool)
& Nbsp; * fișiere postare (encode_multipart_formdata)
& Nbsp; * Built-in de redirecționare și încercări (opțional)
& Nbsp; * thread-safe
Ce e în neregulă cu urllib și urllib2?
Există două caracteristici esențiale lipsesc din biblioteca standard Python: Conexiune re-utilizarea / punerea în comun și fișier postare. Nu e foarte greu să pună în aplicare aceste le dar este mult mai ușor de a utiliza un modul care a făcut deja de lucru pentru tine.
Bibliotecile standard de Python urllib și urllib2 au puțin de a face unul cu altul. Acestea au fost concepute pentru a fi independent și independent, fiecare rezolvarea un domeniu de aplicare diferit de probleme, și urllib3 urmează, în mod similar.
De ce vreau să reutilizați conexiuni?
Performanță. Când în mod normal, faci un apel urllib, o conexiune separată socket este creat cu fiecare cerere. Prin reutilizarea prize existente (acceptate de la HTTP 1.1), cererile vor dura până mai puține resurse pe final serverului, și de asemenea, oferă un timp de răspuns mai rapid la capătul clientului. Cu unele repere simple (a se vedea încercare / benchmark.py), descărcarea de URL-uri de la 15 google.com este de aproximativ două ori mai rapid atunci când se utilizează HTTPConnectionPool (care utilizează 1 conexiune), decât cu ajutorul urllib simplu (care utilizează 15 conexiuni).
Această bibliotecă este perfect pentru:
& Nbsp; * De vorba cu un API
& Nbsp; * Crawling un site web
& Nbsp; * Orice situație în care posibilitatea de a posta fișiere, mâner redirecționarea, iar reîncerca este util. E relativ ușor, astfel încât acesta poate fi utilizat pentru orice!
Exemple:
Du-te la wiki Exemple pentru mai multe exemple de subliniat-sintaxă frumos.
Dar, pe scurt:
din import urllib3 HTTPConnectionPool
API_URL = 'http://ajax.googleapis.com/ajax/services/search/web'
http_pool = HTTPConnectionPool.from_url (API_URL)
câmpuri = {'v': "1.0", "q": "urllib3"}
r = http_pool.get_url (API_URL, câmpuri)
r.status imprimare, r.data p>
Ce este nou în această versiune:
- urllib3.add_stderr_logger Adaugata () pentru scurt permițând STDERR depanare de logare în urllib3.
- URL complet Native parsarea (inclusiv auth, cale, interogare, fragment) disponibil în urllib3.util.parse_url (url).
- Built-in redirect va trece metodă de a "GET", dacă cod de stare este 303. (Ediția # 11)
- urllib3.PoolManager benzi schemei și gazdă înainte de a trimite URI cerere. (Numărul # 8)
- New urllib3.exceptions.DecodeError excepție atunci când decodare automat, pe baza antetul Content-Type, nu.
- Fixed bug cu epuizarea piscină și conexiuni scurgeri (Ediția # 76). Adaugata conexiune explicită de închidere pe piscină evacuare. Adăugat urllib3.PoolManager.clear ().
- 99% - & gt; Acoperire de 100% unitate de testare.
Ce este nou în versiunea 1.4:.
- remedieri legate de AppEngine minore
- comutat de la mimetools.choose_boundary la uuid.uuid4 ().
- Îmbunătățirea parsing url. (Numărul # 73)
- sprijin url IPv6. (Numărul # 72)
Ce este nou în versiunea 1.3:.
- pre-1.0 API depreciat Eliminat
- ajutoare Refactored într-un submodul urllib3.util.
- codare cu mai multe fixă pentru a sprijini listă-a-tuple pentru chei cu valori multiple. (Numărul # 48)
- mai multe antete Set-Cookie fixe în răspuns nu obtinerea fuzionat în mod corespunzător în Python 3. (Ediția # 53)
- suport frontendul App Engine cu Py27. (Numărul # 61)
- stabilește encode_multipart_formdata minore legate de Python 3 siruri vs bytes.
Ce este nou în versiunea 1.2.2:
- bug ambalarea fixă a nu aduce testare cerințe. txt. (Numărul # 47)
Ce este nou în versiunea 1.2.1:
- Fixed un alt bug legat de când modulul ssl nu este disponibil. (Numărul # 41)
- Localizare erori de parsare ridica acum urllib3.exceptions.LocationParseError care moștenește de la ValueError.
Ce este nou în versiunea 1.2:
- Adăugat Python 3 de sprijin (testat pe 3.2.2)
- cazut Python 2.5 de sprijin (testat pe 2.6.7, 2.7.2)
- Utilizarea select.poll în loc de select.select pentru platformele care îl suportă.
- Utilizarea Queue.LifoQueue în loc de Queue.Queue pentru reutilizare conexiune mai agresiv. Configurabil de ConnectionPool.QueueCls imperative.
- fixă ImportError în timpul instalării când modul ssl nu este disponibil. (Numărul # 41)
- fixă PoolManager redirecționează între sistemele de (cum ar fi HTTP - & gt; HTTPS) nu completare corect. (Ediția # 28, neacoperit de Numărul # 10 la v1.1)
- dummyserver adaptată pentru a utiliza tornadă în loc de webob + eventlet. Eliminate străine neacceptate backend de testare dummyserver. Teste Adaugata la nivel de soclu.
- Mai multe teste. Realizare Unlocked:. 99% Acoperire
Ce este nou în versiunea 1.1:
- Refactored dummyserver la propria modul de rădăcină spațiu de nume (utilizat pentru testare ).
- Adaugata verificare nume de gazdă pentru VerifiedHTTPSConnection de vendoring în ssl_match_hostname Py32 lui. (Numărul # 25)
- fix HTTP eco-gazdă redirecționează atunci când se utilizează PoolManager. (Numărul # 10)
- decode_content fixă ignorate atunci când este setat prin urlopen. (Numărul # 27)
- bug-uri legate de timeout fixe. (Probleme # 17, # 23)
Ce este nou în versiunea 1.0.2:
- greșeli fixă în VerifiedHTTPSConnection care ar prezenta doar ca un bug dacă utilizați manual obiect. (Multumesc pyos)
- Made RecentlyUsedContainer (și, prin urmare, PoolManager) mai thread-safe de ambalaj jurnalul de acces într-un mutex. (Mulțumirichrister)
- Made RecentlyUsedContainer mai dict ca (__delitem__ corectat și comportament __getitem__), cu teste. Nu ar trebui să afecteze cod de bază urllib3.
Ce este nou în versiunea 1.0.1:
- Fixed un bug în cazul în care aceeași conexiune ar obține întors în piscina de două ori, provocând străine & quot; HttpConnectionPool este plin & quot; log avertismente.
Cerințe :
- Python
Comentariile nu a fost găsit