【问题标题】:Retrieve the content of a page requiring authentication检索需要身份验证的页面的内容
【发布时间】:2014-06-16 08:04:28
【问题描述】:

我可以使用基本的 HTTP 身份验证系统访问管理页面。

此页面使用 JavaScript 加载数据,方法是从我可以在 Firefox Web 开发工具中看到的另一个 URL 检索 JSON 数据(组合 Ctrl+Shift+I,然后进入“网络”选项卡并重新加载页面)

如果我将此 URL 复制并粘贴到我的浏览器的同一实例中,我会检索我需要的 JSON 数据。

所以:

  1. 使用 Firefox,我连接到管理页面并提供用户名/密码。
  2. 使用 Firefox Webdev 工具箱,我检索用于检索我想要的 JSON 数据的 URL。
  3. 我复制并粘贴此 URL 并获取我需要的 JSON 数据,准备进行解析。

现在,我想使用 Python 3 自动执行相同的操作。

我使用Requests 使其更容易。但是,如果我尝试直接检索在步骤 3 中找到的 URL,则会收到 401 Authentication 错误:

import requests
url = "http://xxx/services/users?from=0&to=50"
r = requests.get(url, auth=('user', 'passwd'))
r.status_code
>>> 401

我可以在管理 URL(类似于http://xxx/admin-ui/)上执行经过身份验证的请求,并且可以检索网页的内容,但它不包含任何有趣的内容,因为所有内容都是从 JSON 数据传入的 JavaScript 中加载的从步骤 3 中的 URL...

欢迎任何帮助!

【问题讨论】:

  • requests.getrequests.get时尝试获取你获得的cookies并使用它们
  • @laike9m 感谢您的建议!我试图检索r.cookies,但得到一个空项目:<<class 'requests.cookies.RequestsCookieJar'>[]>。有什么想法吗?
  • 浏览器呢?有没有你能看到的 cookie?

标签: python json authentication python-3.x python-requests


【解决方案1】:

我需要使用基于表单的身份验证,而不是我最初认为的 HTTP 基本身份验证。

所以首先我需要登录到第一个 URL 以检索身份验证 cookie:

url = "http://xxx/admin-ui/"
credentials = {'j_username':'my_username','j_password':'my_passwd'}
s = requests.session()
s.post(url, credentials)
s.cookies
>>> <<class 'requests.cookies.RequestsCookieJar'>[Cookie(version=0, name='JSESSIONID', value='...>

然后我可以使用这个 cookie 连接到第二个 URL 并检索我需要的数据:

url2 = "http://xxx/services/users?from=0&to=50"
r = requests.get(url2, cookies=s.cookies)
r.content
>>> (a lot of JSON data! \o/)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多