requests 如何模拟提交 multipart/form-data 的表单

在用 requests模拟提交一个网站的回复时,通过调试面板发现表单提交是 multipart/form-data而非普通的 form表单的 application/x-www-form-urlencoded
格式为
clipboard.png
在此卡住了,不知道改如何提交这种格式的
搜索后发现前人的解决办法也并不十分恰当
其它关于multipart/form-data 的只看到了关于文件上传的文章,requests 官方文档也是文件而非表单。


欢迎协助修改问题描述让问题描述更精准而简练
望各位帮忙

阅读 11k
8 个回答

来自requests官方文档
http://docs.python-requests.org/en/latest/user/quickstart/#post-a-multipart-encoded-file

url = 'http://httpbin.org/post'
files = {'file': open('report.xls', 'rb')}
r = requests.post(url, files=files)

上面的例子是只传文件的情况
如果在传文件时还传递其他表单信息,可以请求时指定data参数

url = 'http://httpbin.org/post'
files = {'file': open('report.xls', 'rb')} # 文件 
datat = {'name':'hqs0417'} # 其他表单
r = requests.post(url, files=files, data=data)

requests.post(url, files=files, data=data) 这样不就好了

你是想提交 application/x-www-form-urlencoded 这样的表单吗?

我想通过魔改请求headers可以实现

requests.post(url, headers={'Content-type': 'application/x-www-form-urlencoded'}, ...)

设置request-header就好了

新手上路,请多包涵

你看这样可以不,望采纳
asParm = {'cid': cid, 'tn': tn, 'type': 'image'}
file = {'file': ('1.jpg', open('./image/1.jpg', 'rb'), 'multipart/form-data', {'Expires': '0'})}
urlRet = requests.post(uploadmediaurl, data=asParm,files=file)

如果是测试的话,装一个chrome插件:postman;如果是代码模拟的话,可以试试html5的FormData

你是在说前端么?jquery.form可以用ajax方式提交

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题