python - 在 Python 中,如何连接到需要登录并具有自签名证书的站点?

标签 python ssl https tivo

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

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

enter image description here

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

一旦我通过了身份验证请求,我就得到了我需要的数据。我看到 this question about ignoring certificate issues谈到在使用 urllib2 时处理认证检查。第一个选择的答案对我没有帮助,因为它说 urllib2 不检查证书的真实性。超过 120 票的答案更能解决对证书的担忧。

我也看到了 this question about 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"

我在 Debug模式下尝试了 wget 以查看它做了什么。我原本希望用户名和密码以某种方式只是嵌入到 URL 中,但现在我发现它们没有并且仍然在初始联系后传递,以响应来自目标系统的验证请求。

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

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

最佳答案

我已经尝试使用带有自签名证书的本地 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/

您也可以使用机器人框架之类的东西 - 尽管它对于您想要实现的目标来说可能有点矫枉过正。 https://robotframework.org/#introduction

关于python - 在 Python 中,如何连接到需要登录并具有自签名证书的站点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57506230/

相关文章:

php - SSL 证书错误 : insecure URLs and a form

javascript - Python 返回 jsonp 以进行自动完成

python - Python 中 super() 和 super(className,self) 的区别

ssl - 开发工具不显示通过 javascript 加载的不安全内容

Django 站点地图生成 https ://in loc TWICE in Development

c# - 使用 C# 和 .NET 4.5 连接到 SSL 服务器时出错

python - Angular 节点与 docker 内的 python 后端通信失败

Python 列表 : Appending a string and removing ALL quotations

php - 从运行 PHP 的应用服务调用 Azure 表存储时出现 cURL 错误 60

apache - "Job for httpd.service failed because the control process exited with error code."我该如何解决这个问题?