Python请求post clyp.it上传文件

标签 python post python-requests

我正在尝试将音频文件上传到 clyp.it 网络服务。 api 描述如下:http://clyp.it/api 。相关摘录:

Uploads are done via a multipart/form-data POST. Consider the following form: 
<form action="http://upload.clyp.it/upload" enctype="multipart/form-data" method="post"> 
    <input type="file" name="audioFile"> 
    <input type="submit" value="Send to Clyp"> 
</form> 

It will create a request that looks like this: 
POST http://upload.clyp.it/upload HTTP/1.1 
Host: upload.clyp.it 
Connection: keep-alive 
Content-Type: multipart/form-data; boundary=---------------------------21632794128452 
Content-Length: 5005 
-----------------------------21632794128452 
Content-Disposition: form-data; name="audioFile"; filename="MyAudioFile.mp3" 
Content-Type: audio/mpeg 
(Audio file data goes here)

我可以通过创建一个包含上述表单 block 的 html 文件来上传文件。我希望能够通过 python 上传这个文件。我一直在尝试使用“请求”模块(http://docs.python-requests.org/en/latest/)来做到这一点

我已经尝试过这个:

clyp_file_upload_url = 'https://upload.clyp.it/upload'
music_mp3 = open('/home/jinal/Downloads/music.mp3', 'rb')
send_files = {'audioFile':music_mp3}
r = requests.post(clyp_file_upload_url, files=send_files)
print(r.status_code)

它返回一般 500 错误。我怀疑我没有正确构建帖子请求。我该怎么做?

最佳答案

您需要将files字典参数中每个上传文件的Content-Type设置为requests.post(),即

clyp_file_upload_url = 'http://upload.clyp.it/upload'
music_mp3 = open('/home/jinal/Downloads/music.mp3', 'rb')
send_files = {'audioFile': ('music.mp3', music_mp3, 'audio/mpeg')}
r = requests.post(clyp_file_upload_url, files=send_files)
print(r.status_code)

>>> from pprint import pprint
>>> pprint(r.json())
{u'AudioFileId': u'5jahwd0y',
 u'Description': u'#Me #TestOfMp3File #Other',
 u'Duration': 12.408,
 u'Latitude': None,
 u'Longitude': None,
 u'Message': None,
 u'Mp3Url': u'http://a.clyp.it/5jahwd0y.mp3',
 u'OggUrl': u'http://a.clyp.it/5jahwd0y.ogg',
 u'PlaylistId': u'0kpvbr1j',
 u'PlaylistUploadToken': u'd5ec65e0e197d5fe45e7b18371a2e1f0',
 u'SecureMp3Url': u'https://s3.amazonaws.com/a.clyp.it/5jahwd0y.mp3',
 u'SecureOggUrl': u'https://s3.amazonaws.com/a.clyp.it/5jahwd0y.ogg',
 u'Successful': True,
 u'Title': u'Me - Test of MP3 File',
 u'Url': u'http://clyp.it/5jahwd0y'}
  • 请注意,URI 方案应为 http,而不是 https

关于Python请求post clyp.it上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25760488/

相关文章:

c# - 如何在 ASP.NET MVC 中的 POST 请求之间传输 ViewModel 数据?

Java - 发送HTTP POST请求而不下载所有内容

python - 尝试验证 Power Bi Web 应用程序时,重定向 url 不返回授权代码

python - 从 Python 中的字典列表创建 JSON

python - 如何使用 BeautifulSoup 仅从具有特定开始的标签中获取字符串?

java - 在Java中发送HTTP POST请求

python-3.x - 通过请求库调用API获取access token

python - 与 Python 请求一起发送时忽略 URL 参数

python - 导入错误 : No module named auth. 凭据

python - 如何按轴选择pandas表的行索引或列索引