【发布时间】:2017-09-22 23:14:23
【问题描述】:
我正在尝试使用 Openload REST API 将 upload a file 称为“240p.mp4”。
由于上传端点需要文件的 SHA-1 哈希,我通过这样做得到它:
sha1 = hashlib.sha1()
BLOCKSIZE = 65536
with open('240p.mp4', 'rb') as afile:
buf = afile.read(BLOCKSIZE)
while len(buf) > 0:
sha1.update(buf)
buf = afile.read(BLOCKSIZE)
sha1_hash = sha1.hexdigest()
所以我请求了一个上传链接:
url = "https://api.openload.co/1/file/ul?login={login}&key={key}&sha1={sha1}".format(
login='YOUR_LOGIN',
key='YOUR_API_KEY',
sha1=sha1_hash,
)
p = {
'url': url,
'headers': {
'User-Agent': self.ua,
}
}
r = self.r.get(url=p['url'], headers=p['headers'])
j = r.json()
upload_link = j['result']['url']
他们建议做一个 CURL 但我更喜欢requests 人^^
curl -F file1=@/path/to/file.txt https://13abc37.example.com/ul/jAZUhVzeU78
所以我尝试使用 POST 请求来复制它:
p = {
'url': upload_link,
'headers': {
'user-agent': self.ua,
'Content-Type': 'multipart/form-data; boundary="xxx"',
},
'files': {
'file1': open('/scripts/wordpress/240p.mp4', "rb"),
# I've also tried this (and some others)
# 'file1': ('240.mp4', open('/scripts/wordpress/240p.mp4', "rb"), 'video/mp4')
}
}
r = self.r.post(url=p['url'], headers=p['headers'], files=p['files'])
但是它返回这个错误响应:
r.content¬
{
"status": 500,
"msg": "failed to read: closed"
}
理论上,状态 500 错误是来自服务器的错误。但是为什么我会收到这个错误?
N1:我已经明确设置了boundary="xxx",因为如果我不这样做。响应返回它丢失。所以我设置了它。
N2:文件/scripts/wordpress/240p.mp4的路径是正确的。还有权限。
N3:我知道远程上传功能,但我需要从二进制文件上传(我的意思是从本地)
N4:很明显,但self.r 是requests.session() 的分配
【问题讨论】:
-
我要试试。谢谢。如果它有效,我将检查代码以了解我的代码在哪里失败......
标签: python rest api multipartform-data