urllib3 é uma biblioteca Python HTTP com o pool de conexão thread-safe e suporte pós arquivo.
Destaques:
& Nbsp; * Re-utilizar a mesma conexão de soquete para várias solicitações (HTTPConnectionPool)
& Nbsp; * postagem Arquivo (encode_multipart_formdata)
& Nbsp; * Built-in redirecionamento e tentativas (opcional)
& Nbsp; * Thread-safe
O que há de errado com urllib e urllib2?
Há duas características críticas ausentes da biblioteca padrão do Python: Connection reutilização / pooling e arquivo de postagem. Não é terrivelmente difícil de implementar esses mesmo, mas é muito mais fácil de usar um módulo que já fez o trabalho para você.
Os Python bibliotecas padrão urllib e urllib2 têm pouco a ver um com o outro. Eles foram projetados para ser independente e autônomo, cada solução de um escopo diferente de problemas, e urllib3 segue em uma veia similar.
Por que eu quero para reutilizar conexões?
Performance. Quando você normalmente faz uma chamada urllib, uma conexão de soquete separada é criada com cada solicitação. Ao reutilizar soquetes existentes (apoiados desde HTTP 1.1), os pedidos terão menos recursos no final do servidor, e também fornecer um tempo de resposta mais rápido no final do cliente. Com alguns benchmarks simples (ver test / benchmark.py), download de 15 URLs do google.com é de cerca de duas vezes mais rápido quando se usa HTTPConnectionPool (que usa uma conexão) do que usar urllib simples (que utiliza 15 conexões).
Esta biblioteca é perfeito para:
& Nbsp; * Conversando com uma API
& Nbsp; * Crawling um website
& Nbsp; * Qualquer situação em que ser capaz de postar arquivos, lidar com o redirecionamento, e tentar novamente é útil. É relativamente leve, por isso pode ser usado para qualquer coisa!
Exemplos:
Vá para o wiki Exemplos para exemplos com sintaxe destacada mais agradáveis.
Mas, longa história curta:
de importação urllib3 HTTPConnectionPool
API_URL = 'http://ajax.googleapis.com/ajax/services/search/web'
http_pool = HTTPConnectionPool.from_url (API_URL)
fields = {'v': '1.0', 'q': 'urllib3'}
r = http_pool.get_url (API_URL, campos)
impressão r.status, r.data p>
O que é novo nesta versão:
- urllib3.add_stderr_logger Adicionado () para rapidamente STDERR permitindo o registro de depuração no urllib3.
- URL completa Native análise (incluindo auth, caminho, consulta, fragmento) disponível em urllib3.util.parse_url (url).
- Built-in redirecionamento mudará método para 'GET', se o código de estado é 303. (edição # 11)
- urllib3.PoolManager retira o esquema e anfitrião antes de enviar o pedido uri. (Edição # 8)
- exceção New urllib3.exceptions.DecodeError para quando decodificação automática, com base no cabeçalho Content-Type, falhar.
- Corrigido o erro com esgotamento piscina e conexões vazamento (edição # 76). Adicionado conexão explícita fechar em piscina de despejo. Adicionado urllib3.PoolManager.clear ().
- 99% - & gt; Cobertura de teste de unidade de 100%.
O que é novo na versão 1.4:.
- correções relacionadas com AppEngine Menores
- Comutado de mimetools.choose_boundary para uuid.uuid4 ().
- Improved parsing url. (Edição # 73)
- apoio url IPv6. (Edição # 72)
O que é novo na versão 1.3:.
- -1.0 pré API preterido Removido
- ajudantes reformulado em um submodule urllib3.util.
- codificação multipart fixo de apoio lista-de-tuplas de chaves com vários valores. (Edição # 48)
- vários cabeçalhos Set-Cookie fixos em resposta não se fundiu corretamente em Python 3. (edição # 53)
- apoio AppEngine com Py27. (Edição # 61)
- correções encode_multipart_formdata menores relacionados com Python 3 cordas vs bytes.
O que é novo na versão 1.2.2:
- bug embalagem fixo de não enviar test-requisitos. txt. (Edição # 47)
O que é novo na versão 1.2.1:
- Corrigido outro bug relacionado a quando o módulo SSL não é à disposição. (Edição # 41)
- Localização erros de análise agora levantar urllib3.exceptions.LocationParseError que herda de ValueError.
O que é novo na versão 1.2:
- 3 Adicionado suporte Python (testado no 3.2.2)
- Caiu 2,5 apoio Python (testado em 2.6.7, 2.7.2)
- Use select.poll em vez de select.select para plataformas que suportam.
- Use Queue.LifoQueue em vez de Queue.Queue para reutilização de conexão mais agressivo. Configurável pelo ConnectionPool.QueueCls imperiosas.
- ImportError fixo durante a instalação quando o módulo SSL não está disponível. (Edição # 41)
- poolmanager Fixo redireciona entre os regimes (como HTTP - & gt; HTTPS) não concluir corretamente. (Edição # 28, descoberto pela edição # 10 da v1.1)
- dummyserver portado para utilizar tornado em vez de WebOb + eventlet. Removido não suportados backends teste dummyserver estranhos. Adicionado testes de nível de socket.
- Mais testes. Realização destravada:. 99% de cobertura
O que é novo na versão 1.1:
- Refatorada dummyserver para seu próprio módulo namespace root (usado para testes ).
- verificação hostname Adicionado para VerifiedHTTPSConnection por vendoring em ssl_match_hostname de Py32. (Edição # 25)
- HTTP cross-Host fixo redireciona ao usar poolmanager. (Edição # 10)
- decode_content fixo a ser ignorado quando definido através urlopen. (Edição # 27)
- bugs relacionados tempo limite fixos. (Questão # 17, # 23)
O que é novo na versão 1.0.2:
- Corrigido o erro em VerifiedHTTPSConnection que só está presente como um bug se você estiver usando o objeto manualmente. (Graças pyos)
- Made RecentlyUsedContainer (e consequentemente poolmanager) mais thread-safe por envolvimento log de acesso em um mutex. (Obrigadochrister)
- Made RecentlyUsedContainer mais dict-like (__delitem__ corrigido e comportamento __getitem__), com testes. Não deve afetar código urllib3 núcleo.
O que é novo na versão 1.0.1:
- Corrigido um bug onde a mesma conexão que se voltou na piscina duas vezes, causando estranhas & quot; HttpConnectionPool está cheia & quot; avisos de log.
Requisitos :
- Python
Comentários não encontrado