0

我已经看到了一些帮助我在这方面取得进展的点点滴滴,但我正试图将它们联系在一起,但我还没有做到这一点。

简而言之,我正在尝试通过登录连接到 TiVo,这样我就可以获得设备上录音的 xml 文件。我已经尝试寻找在 URL 中包含用户和密码的方法,但这似乎不起作用。当我在 Chrome 中输入 URL 时,我会收到一个用户名和密码的请求者:

在此处输入图像描述

我在登录 ISP 的路由器或防火墙时经常看到这种情况。我确信这是一件司空见惯的事情,但我对 HTTP 请求的了解还不够,无法知道如何处理它。我也知道这是个问题,因为这个页面要我登录,但 SSL 证书是自签名的。

一旦我通过了身份验证请求,我就会得到我需要的数据。我看到这个关于忽略证书问题的问题,它谈到了在使用 urllib2 时处理认证检查。第一个和选定的答案对我没有帮助,因为它说 urllib2 不检查认证真实性。超过 120 次投票的答案更能解决对证书的担忧。

我也看到了这个关于 logins的问题,它也解决了我的部分问题。我不明白这个答案是否在谈论使用我需要帮助的同一种登录方式。我也看不到如何组合这两个问题的答案,因为它们使用两种不同的方式从 URL 中检索数据。

我还找到了使用 wget 的解决方案:

 wget --no-check-certificate --http-user=tivo --http-password=your-MAK-here
  -O nowplaying.xml "https://192.168.2.103/TiVoConnect?
 Command=QueryContainer&Container=%2FNowPlaying&Recurse=Yes"

我在调试模式下尝试了 wget 看看它做了什么。我希望,不知何故,用户名和密码只是嵌入在 URL 中,但现在我看到它们没有并且仍然在初次联系后传递,以响应来自目标系统的验证请求。

我需要能够在 Python 中使用一些东西来处理我所描述的登录类型。但我也需要同样的方法来忽略证书是自签名的事实。我看到了每个问题的解决方案,但没有同时处理这两个问题。

那么我该如何处理这种类型的登录呢?(与第二个问题的登录问题相同)我如何同时忽略证书问题?

4

1 回答 1

0

我已经使用带有自签名证书的本地 Bitbucket 实例尝试了以下操作。

import httplib
import ssl
from requests import Session
from bs4 import BeautifulSoup as bs


server = 'https://bitbucket.xxx.xxx'
#connection = httplib.HTTPSConnection(server, '443', timeout=60, context=ssl.SSLContext(ssl.PROTOCOL_TLSv1))

with Session() as s:
    site = s.get('%s/login' % server, timeout=60, verify=False)
    bs_content = bs(site.content, "html.parser")
    #token = bs_content.find("input", {"name":"csrf_token"})["value"]
    login_data = {"username": "xxx", "password": "xxx"}
    s.post("%s/login" % server, login_data)
    home_page = s.get(server)
    print(home_page.content)

参考:https ://linuxhint.com/logging_into_websites_python/

您也可以使用 Robot Framework 之类的东西——尽管对于您想要实现的目标来说,这可能是一种矫枉过正。 https://robotframework.org/#introduction

于 2019-08-15T08:40:17.497 回答