如何让Python3请求库发送带有post请求而不是0的实际Content-Length?

时间:2014-07-03 17:44:59

标签: python http python-3.x python-requests

因此,我一直致力于制作一个对NetDoT安装进行身份验证的脚本。通常,浏览器会加载URL并使用我想要的cookie获得302重定向。相反,我的脚本获得403没有cookie。经过大量的调试,主要包括数据包捕获和FireFox篡改数据插件请求,并试图缩小请求库请求和FireFox请求之间的差距,我能够通过发送内容长度来重现Firefox中的问题0,就像请求库一样。

所以,现在我想弄清楚如何让请求库发送一个正确大小而不是0的内容长度。我已经搜索了谷歌,但没有找到任何东西一切都很明显。我使用python3和Ubuntu 14.04以防万一。

那么,如何让请求库计算并发送大小合适的Content-Length而不是0?

这是我目前正在使用的内容。运行wireshark显示它发送Content-Length为0。

import requests
s = requests.Session()
s.headers.update({'referer':  'http://my.server.com/netdot/'})
b = s.post('http://my.server.com/netdot/NetdotLogin', params={'destination' : '/netdot/', 'credential_0' : 'admin', 'credential_1' : 'password'})

(不,我没有使用password作为我的密码,我知道更好,我只是不想公开发布我的密码。)

1 个答案:

答案 0 :(得分:2)

params参数用于传递url参数,而不是用于发送帖子内容。这就是为什么您的帖子请求的内容长度为0,因为它不包含任何内容。

要将数据正确地作为内容而不是url参数传递,请改用data参数:

...
b = s.post('http://my.server.com/netdot/NetdotLogin', data={'destination' : '/netdot/', 'credential_0' : 'admin', 'credential_1' : 'password'})
...