Python请求post clyp.it上载文件

Python请求post clyp.it上载文件,python,post,python-requests,Python,Post,Python Requests,我正在尝试将音频文件上载到clyp.it web服务。此处描述了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="

我正在尝试将音频文件上载到clyp.it web服务。此处描述了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)

它返回一个通用的500错误。我怀疑我没有正确构建post请求。我应该怎么做呢?

看起来他们对请求格式有一些假设。我猜这个错误可能是由于缺少文件名造成的。尝试:

send_files = {'audioFile': ('music.mp3', music_mp3)}

查看它是否解决了您的问题。

您需要将
文件
字典参数中每个上载文件的
内容类型设置为
请求.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

文件名是必需的,但它也需要内容类型。谢谢你的回答。
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'}