用PRAW SSLError?

时间:2014-02-09 04:56:06

标签: python ssl praw

我正在尝试使用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之外有没有办法解决这个问题?

3 个答案:

答案 0 :(得分:2)

TL; DR: _ssl_url doesn't work in PRAW 4。使用Session.verify的自定义请求会话。

对于PRAW 4或更高版本:

根据PRAW's developer,PRAW 4中删除了使用config._ssl_url = None的选项。您可以使用自定义请求Session配置自己的SSL设置。

假设您在a company network with self-signed certificates,您有两种选择。

选项1 - 信任自签名证书

首先,将公司的根证书导出为.pem文件。 (见Export a PEM-Format Certificate From a Windows System

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

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 Warnings

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})

另请参阅

答案 1 :(得分:1)

根据praw SSLError during login from shared hosting

  

您的主机似乎没有正确的SSL证书   安装。您可以通过添加

来禁用SSL(不推荐)
r.config._ssl_url = None
     

创建PRAW对象后。

答案 2 :(得分:0)

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

以下步骤:

  1. 查找浏览器正在使用和导出的内部证书 它作为Base64编码格式。详细信息如下: How to find the path to a SSL cert file?
  2. 找到请求包正在使用的cacert.pem文件 (.. \ Lib \ site-packages \ request)并在结束时复制过去 cacert.pem文件来自内部证书文件。
  3. 这是我的老答案,我暂时通过关闭SSL验证解决了问题

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

    [reddit]
    validate_certs: False
    

    我终于成功了。虽然我有InsecureRequestWarning警告。如果像我这样的人仍然在努力解决这个问题,那就想把它扔到这里。