提问人:ikel 提问时间:8/3/2017 最后编辑:BrokenBenchmarkikel 更新时间:11/15/2023 访问量:1076
RoboBrowser 不会更改 Cookie
robobrowser won't change cookies
问:
我从 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 响应新的 cookie?
答:
0赞
Shashvat Kumar
11/15/2023
#1
似乎问题可能与RoboBrowser处理cookie的方式有关。当服务器在响应中设置新的 cookie 时,您的 RoboBrowser 实例需要相应地更新其 cookie jar。下面是包含处理 Cookie 的代码的修改版本:
from robobrowser import RoboBrowser
# Create a session to handle cookies
browser = RoboBrowser(session=True)
browser.session.headers['X-Requested-With'] = 'XMLHttpRequest'
# Make the POST request
url = 'https://example.com/test/Users/set-role?id=' + role_id + '&__RequestVerificationToken=' + token
browser.open(url, method='POST')
# Update the session's cookies with the ones received in the response
browser.session.cookies.update(dict(browser.response.cookies))
# Print the content or handle it as needed
print(browser.response.content)
此修改包括创建一个会话(在 RoboBrowser() 中为 session=True)以在请求之间持久化 cookie。发出 POST 请求后,代码会使用响应中收到的 cookie 更新会话的 cookie。这应该有助于 RoboBrowser 维护会话并正确处理新 cookie。
试一试,看看它是否能解决您面临的问题。
评论
curl -X POST 'https://example.com/test/Users/set-role?id=<id>&__RequestVerificationToken=<token>' -H 'x-requested-with: XMLHttpRequest'
robobrowser.open()
requests.Session()
_update_state(response)
browser.session.cookies