2

我正在尝试开始使用 PRAW,但在使用 login() 时遇到问题。

我有以下代码:

import praw

r = praw.Reddit('This is a test bot')
r.login('myRedditUsername','password')

我收到以下错误:

requests.exceptions.SSLError: [Errno 1] _ssl.c:503: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

除了禁用 SSL 之外,有没有办法解决这个问题?

4

3 回答 3

2

TL;DR: _ssl_url 在 PRAW 4 中不起作用。将自定义请求会话与Session.verify.

对于 PRAW 4 或更高版本:

根据PRAW 的开发人员的说法,PRAW 4 中删除了使用选项config._ssl_url = None。相反,您可以使用自定义请求会话来配置您自己的 SSL 设置。

假设您在具有自签名证书的公司网络上,您有两种选择。

选项 1 - 信任自签名证书

首先,将您公司的根证书导出为.pem文件。(请参阅从 Windows 系统导出 PEM 格式证书

接下来,创建一个请求会话并直接指定证书文件的路径。

import praw
import requests

session = requests.Session()
session.verify = '/path/to/certfile.pem'  # Path to cert file
reddit = praw.Reddit(client_id='###',
                     client_secret='###',
                     user_agent='windows:testapp (by /u/stevoisiak)',
                     requestor_kwargs={'session': session})

选项 2 - 禁用 SSL 验证(不安全)

此方法将完全禁用所有请求的 HTTPS 验证。虽然这种方法很简单,但出于安全原因强烈建议不要这样做。(请参阅SSL 警告

import praw
import requests

session = requests.Session()
session.verify = False    # Disable SSL
reddit = praw.Reddit(client_id='###',
                     client_secret='###',
                     user_agent='windows:testapp (by /u/stevoisiak)',
                     requestor_kwargs={'session': session})

也可以看看

于 2018-05-03T17:03:49.653 回答
1

根据从共享主机登录期间的 praw SSLError

您的主机似乎没有安装正确的 SSL 证书。您可以通过添加禁用使用 SSL(不推荐)

r.config._ssl_url = None

创建 PRAW 对象后。

于 2014-02-09T05:04:32.030 回答
0

UPD:通过将我公司的内部证书添加到 cacert.pem 文件中,使错误消失。

下面的步骤:

  1. 找到您的浏览器正在使用的内部证书并将其导出为 Base64 编码格式。此处描述了详细信息: 如何找到 SSL 证书文件的路径?
  2. 找到请求包正在使用的 cacert.pem 文件 (..\Lib\site-packages\request),然后在 cacert.pem 文件的末尾复制您内部证书文件中的所有内容。

这是我的旧答案,我通过关闭 SSL 验证暂时解决了这个问题

我在 Windows 7 上遇到了同样的问题,不仅是登录,还有任何对 reddit 的请求。r.config._ssl_url = None在将 praw.ini 创建为 C:\users\&user_name\AppData\Roaming\praw.ini 之后,也没有做到这一点:

[reddit]
validate_certs: False

我终于让它工作了。虽然我有 InsecureRequestWarning 警告。想把它扔在这里,以防像我这样的人还在为此苦苦挣扎。

于 2016-11-12T01:41:25.937 回答