通过请求从受密码保护的网站获取数据

时间:2018-02-28 21:54:21

标签: python http python-requests

我在业余时间担任自由编辑,但最近我工作的公司使他们的通知系统变得更糟,导致我错失了很多机会。我决定尝试创建一个简单的python脚本来每分钟左右拉网站,检查特定字段的更改,并发送电子邮件到专用帐户通知我。我从来没有使用过python,但我陷入困境,发现最好的选择可能是requests库。但是,我很难通过身份验证获得正确的页面,因为我的所有请求都会导致登录页面。

该网站的工作原理如下(如果被标记为垃圾邮件,我会错过TLD):

  1. 员工前往whiteboard.cactusglobal
  2. 他们登录并发送到whiteboard.cactusglobal / dashboard,其中包含我想要阅读的字段。
  3. 我尝试了以下内容:

    requests.get('https://whiteboard.cactusglobal.com/dashboard', auth=('user','pass'))
    

    其中用户传递被替换为适当的值,但没有骰子。我也试过了

    requests.get('https://whiteboard.cactusglobal.com/dashboard', auth=HTTPDigestAuth('user','pass'))
    

    没有帮助,

    payload = {'user':'XXXXXXXX', 'pass':'XXXXXXX'}
    requests.post('https://whiteboard.cactusglobal.com/dashboard', data=payload})
    

    仍然无法正常工作。如上所述,所有请求都给出403并返回登录页面。

    我已经使用Burp从浏览器中获取我的登录详细信息来捕获POST请求,希望它可以解决问题,但我对requests的方式不太了解可以做任何事情。这是请求(删除了cookie):

    POST /dashboard?destination=dashboard HTTP/1.1
    Host: whiteboard.cactusglobal.com
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate
    Referer: http://whiteboard.cactusglobal.com/
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 125
    Connection: close
    Upgrade-Insecure-Requests: 1
    name=XXXXXXXX&pass=XXXXXXXXXX&form_build_id=XXXXXXXXXX&form_id=XXXXXXXXXXXXX
    

    我很遗憾寻求帮助,如果我更好地理解它,可以轻松用Google搜索,但由于我对python缺乏了解并且对HTTP请求知之甚少,因此我无法掌握这些知识。问题有效。谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

对我而言,它与python或HTTP请求无关。 网站whiteboard.cactusglobal不是API,而是网站。 它并不意味着您只能以编程方式访问其页面。它希望真正的用户能够通过它的浏览器与它进行交互。

对我而言,您需要的工具是Selenium。或者任何用户测试自动化工具。这种工具可以让你模仿进入网站的浏览器,被重定向到日志页面,并在相关领域输入验证信息,所有这些都在Python中。

由于您的用例是基本的,如果您了解基本教程,特别是如何填写表单,您将很容易找到自己的方式:)