如何使用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> 标记以查看应该发生的情况以及它'将按照指示使用GETPOSTrequest.Session().post()request.Session().get() 方法为您执行此类 POSTGET 请求,就像 request.post()request.get() 会做的那样,但使​​用任何 cookie 感谢您的回复。但我不明白我的登录表单使用 post 方法进行提交。但是您在 answer 中编写了 s.get() 方法。它可以工作吗? @Heisenberg:第一个.get() 只是获取带有Set-Cookie 标头 的表单。 data=payload 参数在那里出错;它源于您使用requests.get(url, data=payload)的问题代码。

以上是关于如何使用python登录页面,该页面需要服务器在第一次请求时响应的会话ID?的主要内容,如果未能解决你的问题,请参考以下文章

如何python应用flask

python+selenium自动化写登录脚本时,弹出的第三方登录页面该如何定位元素?

python requests 爬虫模拟登录后访问一些界面还是会重定向到登录界面?

如何在@Controller 中提取身份验证令牌

如何登录 YouTube 并获取此页面的内容?

使用HttpClient访问被保护资源