尝试使用reddit api和python 3进行身份验证时出现401错误

时间:2017-05-23 13:07:58

标签: python-3.x oauth reddit

我正在尝试使用python 3脚本不带 PRAW或任何其他包装器进行身份验证。 reddit的官方文档和我发现的搜索都引用了python 2的urllib utils。 This是我用来编写代码的指南。

我在我的reddit配置文件中设置了脚本应用程序的应用程序配置。从app_passwordapp_id中提取。我还使用我的reddit帐户凭据user_iduser_psw,以便进行身份验证,如之前链接的指南中所示。

这是我的代码:

import urllib.request as request
import urllib.parse as parse

pman = request.HTTPPasswordMgrWithDefaultRealm()
pman.add_password(None, "https://reddit.com",
                                  app_id,
                                  app_password)
handler = request.HTTPBasicAuthHandler(pman)
opener = request.build_opener(handler)
request.install_opener(opener)

        # headers
        d = {"grant_type": "password",
             "username": user_id,
             "password": user_pass}
        post_data = parse.urlencode(d).encode("utf-8")

        headers = {"User-Agent": "QuickParsingScript/0.1 by user_id"}

response = request.Request("https://reddit.com/api/v1/access_token",
                                   data=post_data, headers=headers)

request.urlopen(response) # urllib.error.HTTPError: HTTP Error 401: Unauthorized

我注意到在python 2 urllib中你可以POST使用字典,但是在p3的Request中你有以下限制:

  

支持的对象类型包括字节,类文件对象和迭代。

我正在使用urllib.parse.urlencode(),因为我发现了一个关于将http auth调用和一般urllib操作从p2代码库移动到p3代码的SO。那可能是编码问题?我也考虑过使用"https://reddit.com"密码管理器作为uri使我的请求无效但我不知道如何检查根本原因是否来自那里。

1 个答案:

答案 0 :(得分:0)

  

Try "https://www.reddit.com" and "https://www.reddit.com/api/v1/access_token", respectively. I believe reddit returns 301 redirect for your request.

回答r/redditdev