Python SSL认证验证失败

Python SSL认证验证失败,python,ssl,praw,Python,Ssl,Praw,在过去的几天里,我一直在努力学习python,但遇到了一个我不太确定如何解决的问题。我正在尝试制作一个简单的reddit机器人,并学习PrawRedditAPI。当我运行以下bot时: import praw import time r = praw.Reddit('testmachine11968986531') test = r.submission(id="5u7q8x") comment_user = set() # to avoid duplicates for i in x

在过去的几天里,我一直在努力学习python,但遇到了一个我不太确定如何解决的问题。我正在尝试制作一个简单的reddit机器人,并学习PrawRedditAPI。当我运行以下bot时:

import praw
import time

r = praw.Reddit('testmachine11968986531')
test = r.submission(id="5u7q8x")

comment_user = set()   # to avoid duplicates

for i in xrange(0,10):  # Run the loop 10 times
    #comments = r.comments(submission)
    for comment in test.comments:
        body = comment.body.lower()
        if body.find("think") != -1 or body.find("please") != -1:
            comment_user.add(comment.author)
    #time.sleep(120)   # Sleep for 2 minutes

print "Here are some comments:"
for user in polite_users:
    print user
我得到一个错误:

RequestException:请求错误[SSL:CERTIFICATE\u VERIFY\u FAILED]证书验证失败(\u SSL.c:661)

我到处找了找,发现我可以插入

verify = False
在一个get()排序实例中,但我不确定这在这个特定示例中是否有效。我相信其他一切都很好——我可以很好地使用pip,等等

任何帮助都将不胜感激。非常感谢

编辑:完整错误回溯为

 Traceback (most recent call last):
  File "C:\Users\**\Desktop\Bottest\startBot.py", line 16, in <module>
    for comment in test.comments:
  File "C:\Python27\lib\site-packages\praw\models\reddit\base.py", line 31, in __getattr__
    self._fetch()
  File "C:\Python27\lib\site-packages\praw\models\reddit\submission.py", line 133, in _fetch
    'sort': self.comment_sort})
  File "C:\Python27\lib\site-packages\praw\reddit.py", line 320, in get
    data = self.request('GET', path, params=params)
  File "C:\Python27\lib\site-packages\praw\reddit.py", line 404, in request
    params=params)
  File "C:\Python27\lib\site-packages\prawcore\sessions.py", line 133, in request
    self._authorizer.refresh()
  File "C:\Python27\lib\site-packages\prawcore\auth.py", line 328, in refresh
    password=self._password)
  File "C:\Python27\lib\site-packages\prawcore\auth.py", line 138, in _request_token
    response = self._authenticator._post(url, **data)
  File "C:\Python27\lib\site-packages\prawcore\auth.py", line 29, in _post
    data=sorted(data.items()))
  File "C:\Python27\lib\site-packages\prawcore\requestor.py", line 48, in request
    raise RequestException(exc, args, kwargs)
RequestException: error with request [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)
回溯(最近一次呼叫最后一次):
文件“C:\Users\**\Desktop\Bottest\startBot.py”,第16行,在
有关test.comments中的注释:
文件“C:\Python27\lib\site packages\praw\models\reddit\base.py”,第31行,在\uu getattr中__
self._fetch()
文件“C:\Python27\lib\site packages\praw\models\reddit\submission.py”,第133行,在_fetch中
“排序”:self.comment\u sort})
get中第320行的文件“C:\Python27\lib\site packages\praw\reddit.py”
data=self.request('GET',path,params=params)
请求中第404行的文件“C:\Python27\lib\site packages\praw\reddit.py”
params=params)
请求中第133行的文件“C:\Python27\lib\site packages\prawcore\sessions.py”
自我授权人刷新()
文件“C:\Python27\lib\site packages\prawcore\auth.py”,第328行,刷新
密码=self.\u密码)
文件“C:\Python27\lib\site packages\prawcore\auth.py”,第138行,在请求令牌中
response=self.\u authenticator.\u post(url,**数据)
文件“C:\Python27\lib\site packages\prawcore\auth.py”,第29行,在
数据=已排序(data.items())
请求中第48行的文件“C:\Python27\lib\site packages\prawcore\requestor.py”
引发请求异常(exc、ARG、kwargs)
RequestException:请求错误[SSL:CERTIFICATE\u VERIFY\u FAILED]证书验证失败(\u SSL.c:661)

您的问题可能存在于您的
用户代理中。Reddit需要唯一的
用户\u代理
。您
user\u agent
是唯一标识脚本的方式。Reddit API wiki页面()提供了关于用户代理字符串和其他所有内容的官方和更新建议。强烈推荐阅读

除此之外,您的
用户\u代理
字符串必须从不包含该字符串
bot
。这意味着您需要更改您的线路:

r = praw.Reddit('bot1')
对这样的事情:

r = praw.Reddit('Name of your bot [version] by [Your Reddit username or your name]')
[您可能想阅读这篇关于这一问题的优秀教程]

否则,可以在创建praw对象后添加:

r.config._ssl_url = None
不建议这样做,因为这意味着你所有的信息都可能被中间的人截获

你也可以:

加:

r=praw.reddit([…])之后

test=r.submission(id=“5u7q8x”)
更改为
test=r.get\u submission(submission\u id=“5u7q8x”)

并在以下内容后添加:

test = praw.helpers.flatten_tree(test.comments)
您现在应该能够遍历
test
,而不是
test.comments


如果这不起作用,我不知道该怎么办。

您的问题可能存在于您的
用户代理中。Reddit需要唯一的
用户\u代理
。您
user\u agent
是唯一标识脚本的方式。Reddit API wiki页面()提供了关于用户代理字符串和其他所有内容的官方和更新建议。强烈推荐阅读

除此之外,您的
用户\u代理
字符串必须从不包含该字符串
bot
。这意味着您需要更改您的线路:

r = praw.Reddit('bot1')
对这样的事情:

r = praw.Reddit('Name of your bot [version] by [Your Reddit username or your name]')
[您可能想阅读这篇关于这一问题的优秀教程]

否则,可以在创建praw对象后添加:

r.config._ssl_url = None
不建议这样做,因为这意味着你所有的信息都可能被中间的人截获

你也可以:

加:

r=praw.reddit([…])之后

test=r.submission(id=“5u7q8x”)
更改为
test=r.get\u submission(submission\u id=“5u7q8x”)

并在以下内容后添加:

test = praw.helpers.flatten_tree(test.comments)
您现在应该能够遍历
test
,而不是
test.comments


如果这不起作用,我不知道该怎么办。

你从哪一行得到错误?@claymore adrendamar我继续在正文中编辑了它。这可能会有所帮助。不过我不确定。另外,您是否阅读了关于如何使用PRAW的文档?您需要确保您拥有您的客户id、客户机密等。。(如果您不确定,请按ctrl-f键选择该页面中的这些术语。)我没有使用PRAW,但这是我要开始的地方。@Marviel是的,我在PRAW.ini文件中设置了所有这些。出于安全和隐私等原因,我省略了它。你从哪一行得到错误?@claymore adrendamar我继续在正文中编辑了它。这可能会有所帮助。不过我不确定。另外,您是否阅读了关于如何使用PRAW的文档?您需要确保您拥有您的客户id、客户机密等。。(如果您不确定,请按ctrl-f键选择该页面中的这些术语。)我没有使用PRAW,但这是我要开始的地方。@Marviel是的,我在PRAW.ini文件中设置了所有这些。出于安全和隐私等原因,我省略了它。我确实看到了一个建议,建议不要在用户代理中使用bot,但我认为这只会导致问题,因为bot将发布/发送,而不仅仅是阅读和打印返回给我。不管怎样,我试图改变这一点,结果是同样的错误。我更新了正文以反映我的第一个简单文件:
import praw reddit=praw.reddit(client_id='xx',client_secret='xx',password='xx',user_agent='testmachine11968986531',username='xx'),以便在reddit.front.hot()中提交:打印(提交)
导致了相同的错误我用另一个解决方案更新了我的答案<代码>导入praw reddit=praw