Preciso fazer upload de alguns dados para um servidor usando HTTP PUT
em python. Da minha breve leitura dos documentos urllib2, ele faz apenas HTTP POST
. Existe alguma maneira de fazer um HTTP PUT
em python?
220
Eu usei uma variedade de bibliotecas HTTP python no passado e decidi por ' Solicitações ' como a minha favorita. As bibliotecas existentes tinham interfaces bastante úteis, mas o código pode acabar sendo algumas linhas muito longas para operações simples. Um PUT básico em solicitações é semelhante a:
payload = {'username': 'bob', 'email': '[email protected]'}
>>> r = requests.put("http://somedomain.org/endpoint", data=payload)
Você pode verificar o código de status da resposta com:
r.status_code
ou a resposta com:
r.content
Os pedidos têm muito açúcar sinático e atalhos que facilitarão sua vida.
json=payload
parâmetro se desejar que os dados estejam no corpo.fonte
requests
biblioteca.Httplib parece ser uma escolha mais limpa.
fonte
Você deve dar uma olhada no módulo httplib . Deve permitir que você faça o tipo de solicitação HTTP que desejar.
fonte
Eu precisava resolver esse problema também há um tempo, para poder atuar como cliente de uma API RESTful. Eu decidi pelo httplib2 porque ele me permitiu enviar PUT e DELETE, além de GET e POST. O Httplib2 não faz parte da biblioteca padrão, mas você pode facilmente obtê-lo na loja de queijos.
fonte
Você pode usar a biblioteca de solicitações, pois simplifica bastante as coisas em comparação com a abordagem do urllib2. Primeiro instale-o a partir do pip:
Mais sobre a instalação de solicitações .
Em seguida, configure a solicitação de venda:
Veja o início rápido para a biblioteca de solicitações . Eu acho que isso é muito mais simples que o urllib2, mas exige que este pacote adicional seja instalado e importado.
fonte
Isso foi aprimorado no python3 e documentado na documentação do stdlib
A
urllib.request.Request
classe ganhou ummethod=...
parâmetro em python3.Alguns exemplos de uso:
fonte
Eu também recomendo o enableplib2 de Joe Gregario. Eu uso isso regularmente, em vez de httplib na lib padrão.
fonte
Você já deu uma olhada no put.py ? Eu usei isso no passado. Você também pode hackear sua própria solicitação com urllib.
fonte
É claro que você pode criar suas próprias bibliotecas padrão existentes em qualquer nível, desde soquetes até ajustes de urllib.
http://pycurl.sourceforge.net/
"PyCurl é uma interface Python para libcurl."
"libcurl é uma biblioteca de transferência de URLs gratuita e fácil de usar no lado do cliente, ... suporta ... HTTP PUT"
"A principal desvantagem do PycURL é que é uma camada relativamente fina sobre a libcurl sem nenhuma dessas hierarquias de classe Pythonic. Isso significa que ela tem uma curva de aprendizado um tanto íngreme, a menos que você já esteja familiarizado com a API C da libcurl."
fonte
Se você deseja permanecer na biblioteca padrão, pode subclassificar
urllib2.Request
:fonte
Uma maneira mais adequada de fazer isso
requests
seria:Isso gera uma exceção se houver um erro na solicitação HTTP PUT.
fonte