Python urllib vs httplib?

Kiedy ktoś użyje httplib a kiedy urllib?

Jakie są różnice?

Myślę, że gotowy urllib używa httplib, planuję zrobić aplikację, która będzie musiała złożyć żądanie http i do tej pory używałem tylko httplib.HTTPConnection w Pythonie dla żądań, a czytając o urllib widzę, że mogę tego użyć również dla żądania, więc jakie są korzyści z jednego czy drugiego?

Author: jahmax, 2010-07-22

6 answers

Urllib (szczególnie urllib2) obsługuje wiele rzeczy domyślnie lub posiada odpowiednie biblioteki. Na przykład, urllib2 będzie podążać za przekierowaniami automatycznie i możesz użyć cookiejar do obsługi skryptów logowania. Są to wszystkie rzeczy, które musisz sam zakodować, jeśli używasz httplib.

 44
Author: Robus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-22 02:00:58

Chciałbym powiedzieć coś o urllib, urllib2, httplib i httplib2.

Główna różnica między urllib* a httplib* jest taka, że:

Httplib i httplib2 obsługuje żądania i odpowiedzi HTTP/HTTPs bezpośrednio i daje więcej miejsca do wykonywania własnej pracy.

Urllib i urllib2 są zbudowane na httplib, są bardziej abstrakcyjne i potężne, ale czasami nie spełniają określonych potrzeb dotyczących niektórych operacji związanych z HTTP.

I dla httplib i httplib2, powiedziałbym, że oba są HTTP client library. Jednakże httplib2 jest znacznie bardziej wydajny i ma znacznie więcej funkcji niż httplib.

Co do urllib i urllib2, cytuję z ten link :

Urllib i urllib2 są modułami Pythona, które wykonują żądania URL, ale oferują różne funkcje. Ich dwie najważniejsze różnice są wymienione poniżej:

  • urllib2 może zaakceptować obiekt Request, aby ustawić nagłówki żądania URL, urllib akceptuje tylko adres URL. Oznacza to, że nie można maskować łańcucha agenta użytkownika itp.
  • urllib dostarcza metodę urlencode, która jest używana do generowania łańcuchów zapytań GET, urllib2 nie posiada takiej funkcji. Jest to jeden z powodów, dla których urllib jest często używany wraz z urllib2.

Polecam mój osobisty blog Httplib Httplib2 Urllib Urllib2-jaka jest różnica .

Mam nadzieję, że pomoże: -)

 16
Author: Lihang Li,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-04 16:27:45

Urllib / urllib2 jest zbudowany na bazie httplib. Oferuje więcej funkcji niż pisanie bezpośrednio do httplib.

Jednak httplib daje lepszą kontrolę nad bazowymi połączeniami.

 9
Author: Corey Goldberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-10 23:44:14

Jeśli masz do czynienia wyłącznie z http / https i potrzebujesz dostępu do określonych treści HTTP, użyj httplib.

We wszystkich innych przypadkach użyj urllib2.

 6
Author: Matt Joiner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-22 02:22:20

Jeśli potrzebujesz rzeczy wysokiego poziomu, takich jak buforowanie, Keep-Alive, kompresja lub uwierzytelnianie, spróbujhttplib2

 5
Author: optixx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-23 10:05:26

Dla tych, którzy przenoszą rzeczy do Py3 (i z jakiegoś powodu nie mogą lub nie mają refakturowania, aby użyć modułu awesome requests ), jest to dobre przejście między wersjami:

try:
    import http.client as httplib
except ImportError:
    import httplib

Działa w obu zestawach wersji Pythona.

 1
Author: Cometsong,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-20 13:50:57