robobrowser 不会更改 cookies

问题描述 投票:0回答:1

我有一个从 robobrowser 发送到服务器的 POST 请求,服务器没有数据响应。响应标头如下(这是 Chrome 浏览器的响应,它应该是这样的):

Cache-Control:no-cache, no-store, must-revalidate
Content-Length:335
Content-Type:application/json; charset=utf-8
Date:Wed, 02 Aug 2017 17:01:17 GMT
Expires:-1
lg:2673
Pragma:no-cache
Server:Unknown
Set-Cookie:BrandingUserLocationGroupID=ic4DUh/NXVp8VOKAtyDgbA==; expires=Fri, 01-Sep-2017 17:01:16 GMT; path=/; secure; HttpOnly
Set-Cookie:.AIRWATCHAUTH=A69C1A5EE8A5F3626385F35DA1B104EE7DFF5E5AF549DDB02EE8ED53931A0585C0FBB8299E3FC7B428A982B9826EF68390E659F4A74DCE00E195601F400D6E69F53907DADED4194F32DD08A72BA212DCCD0D23AB7C5BD56171E6C55EF1BE90849E9C81B2DAE23B05CA6E361326F44604; expires=Thu, 03-Aug-2017 17:01:17 GMT; path=/; secure; HttpOnly
Strict-Transport-Security:max-age=31536000;includeSubDomains
user:5679
X-Content-Type-Options:nosniff
x-download-options:noopen
x-frame-options:SAMEORIGIN
X-XSS-Protection:1; mode=block

看起来服务器正在重置 cookie,但我的 robobrowser 实例没有响应/刷新新的 cookie。 基本上,我认为该网站正在尝试切换会话/更改 cookie,但我的 python robobrowser 没有反映出来或由于某种原因不允许它更改

这是我的 POST 请求和响应:

browser=RoboBrowser()
browser.session.headers['X-Requested-With']='XMLHttpRequest'
browser.open('https://example.com/test/Users/set-role?id='+role_id+'&__RequestVerificationToken='+token,method='POST')
print browser.response.content

这给了我以下错误信息:

{"RedirectUrl":null,"IsSuccess":false,"Message":"Save Failed","CustomMessage":null,"Errors":[{"Key":"","Value":["An error has occurred. This error has automatically been saved for further analysis. Please contact technical support."]}],"Messages":{},"HasView":false,"ViewHtml":null,"ViewUrl":null,"IsValidationException":false,"IsValidationWarning":false,"ReloadPage":false,"IsSessionExpired":false,"Script":null,"NextWizardUrl":null,"PreviousWizardUrl":null,"ShowDialog":false}

有谁知道如何让robobrowser响应新的cookies?

在 Chrome 的开发者工具中添加了 cookie 的屏幕截图。 突出显示的红色框是单击链接后发生更改的位置。

python python-2.7 http python-requests urllib2
1个回答
0
投票

似乎服务器正在尝试设置新的 cookie,但是您的 RoboBrowser 实例没有反映新的 cookie。您可以尝试在 RoboBrowser 会话中显式设置 cookie 以匹配服务器使用 session.cookies.set() 方法设置的 cookie。

以下是如何在 RoboBrowser 中设置 cookie 的示例:

from requests.cookies import cookiejar_from_dict

# get the cookies from the response headers and convert to a dictionary
cookies_dict = {}
for header in browser.response.headers.getlist('Set-Cookie'):
    cookies_dict.update(cookiejar_from_dict({header.split(';')[0].split('=')[0]: header.split(';')[0].split('=')[1]}).get_dict())

# set the cookies in the session
browser.session.cookies.update(cookies_dict)
© www.soinside.com 2019 - 2024. All rights reserved.