检索需要身份验证的页面的内容

时间:2014-06-16 08:04:28

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

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

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

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

所以:

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

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

    任何帮助都会受到欢迎!

1 个答案:

答案 0 :(得分:0)

我需要使用基于表单的身份验证,而不是我原先认为的HTTP Basic Auth。

首先,我需要登录第一个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/)