我正在尝试使用python 3脚本不带 PRAW
或任何其他包装器进行身份验证。 reddit的官方文档和我发现的搜索都引用了python 2的urllib utils。 This是我用来编写代码的指南。
我在我的reddit配置文件中设置了脚本应用程序的应用程序配置。从app_password
和app_id
中提取。我还使用我的reddit帐户凭据user_id
和user_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使我的请求无效但我不知道如何检查根本原因是否来自那里。
答案 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。