求教一个 Python 关于 form-data 的数据怎么通过 requests.post 上传

2021-03-28 15:35:10 +08:00
 wkx556874
想写一个爬虫自动提交修改某平台的人员信息,
所有信息都搞懂了,但是有一项是照片。
其他例如手机号那些数据直接在 data 字典里面声明 data={"mobile":"13000000000"}就行,
这是抓包抓到的数据:
Content-Disposition: form-data; name="mobile"
Content-Length: 11 13000000000
然后直接 session.post(url, data=data) 就直接修改了,
但是照片应该怎么弄呢?
这是抓包抓到的数据:
Content-Disposition: form-data; name="photo"; filename="pic_after_crop_20210328145606.jpg"
Content-Type: multipart/mixed; boundary=BbC04y
Content-Length: 205722 <file>
我这样写,修改没用。。
files = {"file": ("1.png", open("1.png", "rb"), "image/png")}
data={"photo": "1.png"}
session.post(url, data=data, files=files)
应该怎么写呢?我查了很多文档也没找到。。
只好来问问大佬们。
2540 次点击
所在节点    Python
10 条回复
wkx556874
2021-03-28 15:38:06 +08:00
搞不懂呀。。。
ch2
2021-03-28 15:55:51 +08:00
requests 也不是什么形式的请求都能很简单就发出去的。http 本质上是个字符串构造协议,你自己拼接一个 body,然后 requests.post(url,data=body)就行了,然后搞个 fiddler web debugger 看看报文构造的对不对
676529483
2021-03-28 16:16:37 +08:00
>>> url = 'https://httpbin.org/post'
>>> files = {'file': ("1.png", open('1.png', 'rb')), "photo": "1.png"}

>>> r = requests.post(url, files=files)
关键是 data 和 files 不要一起传,会默认 content-type 为 www-url-encode
SenLief
2021-03-28 17:14:55 +08:00
官网有 https://www.osgeo.cn/requests/user/quickstart.html#more-complicated-post-requests
小文件可以用楼上 3 楼的 files 参数,
大文件需要一个一个包 requests-toolbelt
renmu123
2021-03-28 17:52:38 +08:00
直接 post 文件,或者用 file 参数,但是你可能要手动修改 contetn-type 参数
cra2y4ngel
2021-03-29 09:39:40 +08:00
requests 在提 multi-part/form-data 上面是有些许缺陷的, 可以通过这样的方式传 data 看看

data = {"photo": "1.png"}

files = {
"file": ("1.png", open("1.png", "rb"), "image/png"),
"data":(None, json.dumps(data))
}

requests.post(url=url, file=files)
daxin945
2021-03-29 10:06:27 +08:00
你可以用 postman 尝试发起请求,操作成功后能直接导出代码
k1z
2021-03-29 11:11:34 +08:00
Latin
2021-03-29 11:28:00 +08:00
no1xsyzy
2021-03-29 15:39:44 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/765889

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX