python - MechanicalSoup 证书验证失败

标签 python python-3.x ssl ssl-certificate mechanicalsoup

我想使用 MechanicalSoup 从我的路由器中检索一些数据。但是,当我尝试时,我得到“证书验证失败”。在我看来,我有两个选择

  1. 找到一种禁用 SSL 验证的方法
  2. 告诉 MechanicalSoup 在哪里可以找到 pem 文件(我使用“openssl s_connect .... 创建它”)

到目前为止,我的代码如下所示:

import argparse
import mechanicalsoup
from getpass import getpass

parser = argparse.ArgumentParser(description="Get data from router")
parser.add_argument("-u", "--username", help="User", type=str,
                    required=True)
parser.add_argument("-s", "--server", help="server", type=str,
                    required=True)
parser.add_argument("-p", "--port", help="Port", type=str,
                    required=False, default="8443")
parser.add_argument("-v", "--verbose", help="Verbose output. Add " +
                    "additional v to increase level.",
                    action="count", default=0)
args = parser.parse_args()

args.password = getpass("Password:")

browser = mechanicalsoup.StatefulBrowser(
    soup_config={'features': 'lxml'},
    raise_on_404=True,
    user_agent='getdata.py/0.1',
)

browser.set_verbose(args.verbose)

browser.open("https://" + args.server + ":" + args.port)

来自栈尾的完整错误信息:

Traceback (most recent call last):
  File "perfcreate.py", line 33, in <module>
    browser.open("https://" + args.server + ":" + args.port)
  File "/home/andyw/mypy_env/lib/python3.6/site-packages/mechanicalsoup/stateful_browser.py", line 133, in open
    resp = self.get(url, *args, **kwargs)
  File "/home/andyw/mypy_env/lib/python3.6/site-packages/mechanicalsoup/browser.py", line 124, in get
    response = self.session.get(*args, **kwargs)
  File "/home/andyw/mypy_env/lib/python3.6/site-packages/requests/sessions.py", line 546, in get
    return self.request('GET', url, **kwargs)
  File "/home/andyw/mypy_env/lib/python3.6/site-packages/requests/sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
  File "/home/andyw/mypy_env/lib/python3.6/site-packages/requests/sessions.py", line 646, in send
    r = adapter.send(request, **kwargs)
  File "/home/andyw/mypy_env/lib/python3.6/site-packages/requests/adapters.py", line 514, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='192.168.1.1', port=8443): Max retries exceeded with url: / (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",),))

最佳答案

也许你可以使用:browser.open("https://"+ args.server + ":"+ args.port, verify=False)

关于python - MechanicalSoup 证书验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59295401/

相关文章:

python - 当前在 VS Code 中运行 Python 的快捷方式

Python导入问题

Python正则表达式非贪婪表现得像贪婪

python - 如何使用pytest模拟类属性

ruby-on-rails - 在 Ruby on Rails 应用程序中使用客户端 SSL

PHP Soap SSL 错误 [WSDL] SOAP-ERROR

python - 使用 Python 请求库获取 Ajax Json 输出 500 错误

python - 将字典写入文件

python-3.x - 是否可以使用 python/pyspark 从 RavenDB 中的数据库加载整个集合?

.net - 使用传输安全和证书的 WCF 服务出现 SSL 错误。验证