我正在尝试将音频文件上传到 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/