Existe uma maneira de enviar um arquivo usando POST a partir de um script Python?
python
post
file-upload
http-post
Somente leitura
fonte
fonte
with open('report.xls', 'rb') as f: r = requests.post('http://httpbin.org/post', files={'report.xls': f})
lo, para que ele feche o arquivo novamente após a abertura.Sim. Você usaria o
urllib2
módulo e codificaria usando omultipart/form-data
tipo de conteúdo. Aqui está um código de exemplo para você começar - é um pouco mais do que apenas o upload de arquivos, mas você deve poder lê-lo e ver como funciona:fonte
A única coisa que impede você de usar o urlopen diretamente em um objeto de arquivo é o fato de que o objeto de arquivo interno não possui uma definição de len . Uma maneira simples é criar uma subclasse, que fornece ao urlopen o arquivo correto. Também modifiquei o cabeçalho Content-Type no arquivo abaixo.
fonte
Parece que as solicitações python não tratam arquivos com várias partes extremamente grandes.
A documentação recomenda que você analise
requests-toolbelt
.Aqui está a página pertinente da documentação deles.
fonte
A biblioteca de pôsteres de Chris Atlee funciona muito bem para isso (principalmente a função de conveniência
poster.encode.multipart_encode()
). Como bônus, ele suporta o streaming de arquivos grandes sem carregar um arquivo inteiro na memória. Veja também Python edição 3244 .fonte
Estou tentando testar a API do resto do django e está funcionando para mim:
fonte
close()
um arquivo.Você também pode querer dar uma olhada no httplib2 , com exemplos . Acho que o uso do activationplib2 é mais conciso do que o uso dos módulos HTTP internos.
fonte
requests
.fonte