[英]file upload using requests library in python
我具有以下脚本,该脚本允许我将文件上传到usersfiles。 它不适用于大文件(例如1GB)。 会有什么改变?
import requests
import random
import re
filehandle = open("menu.avi", "rb")
resp=requests.get("https://usersfiles.com/")
sess_id = re.search('sess_id.*=?"(.*)?"', str(resp.text)).group(1)
srv_tmp_url = re.search('srv_tmp_url.*=?"(.*)?"', str(resp.text)).group(1)
upload_type = re.search('upload_type.*=?"(.*)?"', str(resp.text)).group(1)
UID = ''
for i in range(0, 12):
UID = UID + '' + str(random.randint(0,10))
url2="https://up11.usersfiles.com/cgi-bin/upload.cgi?upload_id="+UID+"&js_on=1&utype=reg&upload_type="+upload_type
r = requests.post(url2, data={"upload_type":upload_type , "sess_id":sess_id,
"srv_tmp_url":srv_tmp_url}, files = {"file_0":filehandle})
link_usersfiles = re.search('name=.fn.>(.*?)<', str(r.text)).group(1)
此脚本生成错误:
body.write(数据)
MemoryError
默认情况下,上传文件时, requests
会将整个文件读取到内存中,因此在上传大文件时很容易用完。 解决此问题的最简单方法是安装requests-toolbelt
,它可以轻松地流式传输文件上传。
对于您的示例,您可以使用类似以下的内容:
import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
# ... code for preparing for upload ...
m = MultipartEncoder(
fields={'upload_type': upload_type, 'sess_id': sess_id,
'file_0': ('filename', file handle, 'text/plain')}
)
r = requests.post(url2, data=m,
headers={'Content-Type': m.content_type})
有关更多信息,请参见https://toolbelt.readthedocs.org/en/latest/uploading-data.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.