Qual é a maneira mais rápida de obter HTTP HTTP em Python se eu souber que o conteúdo será uma string? Estou pesquisando na documentação por uma única linha rápida, como:
contents = url.get("http://example.com/foo/bar")
Mas tudo o que consigo encontrar usando o Google é httplib
e urllib
- e não consigo encontrar um atalho nessas bibliotecas.
O Python 2.5 padrão possui um atalho de alguma forma, como acima, ou devo escrever uma função url_get
?
- Eu preferiria não capturar a saída do bombardeio para
wget
oucurl
.
python
http
networking
Frank Krueger
fonte
fonte
Respostas:
Python 3:
Python 2:
Documentação para
urllib.request
eread
.fonte
close
vocêread
. Isso é necessário?read
. Mas umwith
bloco seria mais clara e mais seguro para Jython, etc.requests
funciona bemr = urllib2.urlopen("http://blah.com/blah")
e entãotext = r.read()
. É sincronização, apenas espera pelo resultado em "texto".Você pode usar uma biblioteca chamada solicitações .
Isso é bem fácil. Então você pode fazer assim:
fonte
pip install
). Para bibliotecas não puras, há uma etapa extra - você precisa fazerpip install
a lib em uma instância do AWS Linux (a mesma lambda de variante do SO executada) e depois copiar esses arquivos para obter compatibilidade binária com o AWS Linux. As únicas bibliotecas que você nem sempre poderá usar no Lambda são aquelas com apenas distribuições binárias, que felizmente são muito raras.pip install requests
.from botocore.vendored import requests
Usoresponse = requests.get('...')
Se você deseja que a solução com o Activplib2 seja oneliner, considere instanciar um objeto Http anônimo
fonte
Dê uma olhada no httplib2 , que - ao lado de muitos recursos muito úteis - fornece exatamente o que você deseja.
Onde o conteúdo seria o corpo da resposta (como uma string) e o resp conteria os cabeçalhos de status e resposta.
No entanto, ele não vem incluído em uma instalação python padrão (mas requer apenas python padrão), mas definitivamente vale a pena conferir.
fonte
É simples o suficiente com os poderosos
urllib3
biblioteca.Importe-o assim:
E faça uma solicitação como esta:
Você também pode adicionar cabeçalhos:
Mais informações podem ser encontradas na documentação do urllib3 .
urllib3
é muito mais seguro e fácil de usar do que o módulourllib.request
ouhttp
módulos internos e é estável.fonte
A solução do wget para o wget é realmente útil, no entanto, descobri que não imprime o progresso durante o processo de download. É perfeito se você adicionar uma linha após a declaração de impressão no reporthook.
fonte
Aqui está um script wget no Python:
fonte
Sem mais importações necessárias, esta solução funciona (para mim) - também com https:
Frequentemente, tenho dificuldade em capturar o conteúdo quando não especifico um "User-Agent" nas informações do cabeçalho. Normalmente, os pedidos são cancelados com algo como:
urllib2.HTTPError: HTTP Error 403: Forbidden
ouurllib.error.HTTPError: HTTP Error 403: Forbidden
.fonte
Como também enviar cabeçalhos
Python 3:
Python 2:
fonte
Se você estiver trabalhando especificamente com APIs HTTP, também há opções mais convenientes, como Nap .
Por exemplo, veja como obter dicas do Github desde 1º de maio de 2014 :
Mais exemplos: https://github.com/kimmobrunfeldt/nap#examples
fonte
Excelentes soluções Xuan, Theller.
Para que ele funcione com o python 3, faça as seguintes alterações
Além disso, o URL digitado deve ser precedido por um "http: //", caso contrário, ele retornará um erro de tipo de URL desconhecido.
fonte
Para
python >= 3.6
, você pode usar o dload :Para
json
:Instalar:
pip install dload
fonte
Na verdade, em python, podemos ler URLs como arquivos, aqui está um exemplo para ler json da API.
fonte
Se você deseja uma API de nível inferior:
fonte