如何使用python登录页面,该页面需要服务器在第一次请求时响应的会话ID?
Posted
技术标签:
【中文标题】如何使用python登录页面,该页面需要服务器在第一次请求时响应的会话ID?【英文标题】:how to use python to login page which requires session id responded by server on first request? 【发布时间】:2014-04-13 13:30:10 【问题描述】:我正在编写一个脚本来登录某个网页。为此,我使用 request 和 request.session 模块。在第一个带有登录参数的请求时,服务器响应一个会话 id。如何设置该会话 id 以进一步登录到同一页面。
url = "some url of login page"
payload = 'username': 'p05989', 'password': '123456'
with requests.session() as s:
s.post(url1, data=payload)
sessionid = s.cookies.get('SESSIONID')
print(sessionid)
r = requests.get(url,data=payload)
print(r.text)
在上面的代码中, 服务器在第一个请求时响应 sessionid。如何在第二个请求中使用该 sessionid?
【问题讨论】:
【参考方案1】:import requests
import webbrowser
url = "https://www.invezta.com/investorsignup.aspx"
payload = 'login-email': 'email',
'login-pwd': 'password'
with requests.session() as s:
# fetch the login page
s.get(url)
url1='https://www.invezta.com/Pdf_creator.aspx?User_ID='
# post to the login form
r = s.post(url1, data=payload)
print(r.text)
【讨论】:
【参考方案2】:您已经在使用requests.session()
;它会为您处理 cookie,前提是您继续使用会话处理您的所有请求:
url = "some url of login page"
payload = 'username': 'p05989', 'password': '123456'
with requests.session() as s:
# fetch the login page
s.get(url)
# post to the login form
r = s.post(url1, data=payload)
print(r.text)
在发布到登录表单之前,您可能首先需要使用GET
来设置会话 ID。
SESSIONID
cookie 为您透明地处理。
【讨论】:
@Heisenberg:不,只要您继续使用s
执行您的请求,您就不必担心cookie。
@Martijn Pieters:会话对象的get和post方法属于form方法吗?
@Heisenberg:浏览器解释 html 以查找表单元素,然后当您提交表单时,浏览器会检查 <form>
标记以查看应该发生的情况以及它'将按照指示使用GET
或POST
。 request.Session().post()
和 request.Session().get()
方法为您执行此类 POST
或 GET
请求,就像 request.post()
和 request.get()
会做的那样,但使用任何 cookie。
感谢您的回复。但我不明白我的登录表单使用 post 方法进行提交。但是您在 answer 中编写了 s.get() 方法。它可以工作吗?
@Heisenberg:第一个.get()
只是获取带有Set-Cookie 标头 的表单。 data=payload
参数在那里出错;它源于您使用requests.get(url, data=payload)
的问题代码。以上是关于如何使用python登录页面,该页面需要服务器在第一次请求时响应的会话ID?的主要内容,如果未能解决你的问题,请参考以下文章
python+selenium自动化写登录脚本时,弹出的第三方登录页面该如何定位元素?