你如何在python Requests或urllib2甚至pycurl中实现这个curl命令?我已经看了很多关于stackoverflow和其他地方的例子,它们接近我正在寻找的东西,但没有一个显示使用用户名/密码和令牌进行身份验证的示例(双因素身份验证)。我正在尝试使用双因素身份验证登录网站,然后使用cookie请求json数据 所以我有一个登录表单,需要发布“urserId”,“password”和“token”(我相信该网站使用的是Google身份验证器令牌)。这是我需要的工作curl命令,我想将这两个命令的内容翻译成python。
curl -X POST -H "Accept: Application/json" -H "Content-Type: application/json" http://example.com/rest/auth/login -d '{"userId":"myuserid", "password":"mypa$$word", "token":"321"}'
curl http://example.com/rest/search?q=e43f6f3bd6a0f0c0415accfh285f6a00b55552666b7s --cookie 'connect.sid=s%3BJAUAVY68925VclAlLZCV.Gy902343-x%20343seMBMsQodfdo-35'
我尝试了许多不同的组合,包括以下使用请求的组合:
payload = {"userId":"myuserid", "password":"mypa$$word", "token":"321"}
headers={'Accept': 'Application/json','Content-Type': 'application/json'}
with requests.session() as c:
c.post('http://example.com/rest/auth/login', headers=headers, data=payload )
cookies=c.cookies.get_dict()
c.get('http://example.com/rest/global/config', cookies=cookies)
不幸的是,它导致了响应[400],它告诉我我没有正确使用凭证。
答案 0 :(得分:0)
来自requests
docs:
您希望多次发送未经表单编码的数据。如果您传递的是
string
而不是dict
,则会直接发布该数据。
即。您发布的内容不是application/json
,而是(我假设)application/x-www-form-urlencoded
,您的请求标题是谎言:)
尝试使用data=json.dumps(payload)
。