Requsts 库如何 POST 纯文本?Content-Type 为 text/plain

2019-11-15 14:37:57 +08:00
 zhuzhuaini
抓包获得 POST 体当中的内容是这样的:
aa=1
bb=2
c=1

我在 python 中构建了这样的字典:data={'aa':'1','bb':'2','c':'1'} 执行后抓包,发现内容是
aa=1&bb=2&c=1


我想了一个解决方案但是没有实现
1.让 data 字典在连接的时候将"&"符号转换成"\n",ps:查了一下没有找到相应的解决方案...
2.在网上查到可以使用传送文件的形式,但是抓包后发现变成了:
--5af9e62e59d2513ddaa25c9d9ae43bd9
Content-Disposition: form-data; name="file"; filename="data.txt"
aa=1
bb=2
c=1
--5af9e62e59d2513ddaa25c9d9ae43bd9--
中间是对了 但是头和尾多了许多无用的东西.

特来问问 V2 们,谢谢!!!!
3181 次点击
所在节点    Python
3 条回复
islxyqwe
2019-11-15 14:44:32 +08:00
requests.post(url,data="\n".join(f'{k}={v}' for k,v in data.items()))
zhuzhuaini
2019-11-15 14:55:02 +08:00
@islxyqwe 高手!佩服的五体投地!感谢!完美的解决了我的问题,我在网上查询,用了很多解决方案都是走了弯路...
再次感谢!
ClericPy
2019-11-15 17:01:45 +08:00
data = '''aa=1
bb=2
c=1'''.encode('utf-8')

不就行了


https://github.com/psf/requests/blob/428f7a275914f60a8f1e76a7d69516d617433d30/requests/models.py#L506
看下 Requests 的源码
data 用 dict 格式是让 Requests 通过 _encode_params 函数自动转 application/x-www-form-urlencoded 类型参数来 post, 否则直接用 bytes 就好了, 你看看源码也会发现, 最后 data 总要转 bytes 类型的 body 的

另, 这个请求可以直接导出 curl 么, 可以试试直接用 curlparse 的方式转 Requests 库的请求参数

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

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

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

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

© 2021 V2EX