今天在使用Python的requests-html库上传中文附件时,遇到了几个问题一一解决了,怕时间长忘记,特地做一下记录。废话不多说,先直接上马:
from requests_html import HTMLSession
class AB30():
def __init__(self):
self.sess=HTMLSession()
关键代码:
with open(saveFilePath,'rb') as fs:
_files={
'from':(None,''),
'newDocType':(None,'2'),#解决坑一:第二个参数不能为整型,否则报错
'title':(None,'XXXXXXXX'),
'upload':('上传的文件名.docx',fs,r'application/vnd.openxmlformats-officedocument.wordprocessingml.document',{})
}
self.sess.post=(url,files=_files)
服务器报500错误,开启Fiddler抓包,发现用浏览器上传附件和上述代码上传附件时upload的filename处不同:
浏览器上传:filename=“中文文件名.docx”
Python上传: filename*=utf-8’’%E6%B4.docx
估计问题就出在这里,于是狂百度了一阵,需要在D:\python\Lib\site-packages\urllib3\fields.py(python的安装目录)中的
if not any(ch in value for ch in '"\\\r\n'):
result = '%s="%s"' % (name, value)
try:
# result.encode('ascii') 修改为
result.encode('utf-8')
except (UnicodeEncodeError, UnicodeDecodeError):
pass
else:
return result
问题解决。