使用Reddit API登录时未保存Cookie

2024-04-16 18:03:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我想添加redditapi的login特性,但是cookie没有被保存。以下代码是在自定义身份验证后端中调用的,该后端安装在堆栈中的位置高于Django自己的ModelBackend。在

response = requests.post(REDDIT_LOGIN_URL, data={'user' : username, 
                                                 'passwd' : password})
cookie = SimpleCookie()
cookie.load(response.headers.get('set-cookie'))

返回'mofusel'session['morsession]

^{pr2}$

然而,在我的浏览器中找不到这个Cookie。当页面被重新加载时,我的reddit会话就消失了,除非我再次创建这个会话,否则我不能使用其他redditapi调用。 当我使用Chrome开发工具查看我的cookies时,我在Resources>;cookies下看到一个名为“blank”的条目。当我点击这个,我得到的只是一个白页,上面写着“这个网站没有cookies”

我在django-1.4中使用

SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies"

启用于设置.py. 我试了一下,结果没有一样。在

我是不是少了点什么?我也尝试过使用narwa,但是cookie也没有被保存。我的cookies肯定在我的浏览器中启用了,因为同一个Django会话正在保存Django_语言和会话\u id cookies。在

如有任何建议或答案,我们将不胜感激。在


Tags: django代码身份验证堆栈cookieresponse浏览器login
1条回答
网友
1楼 · 发布于 2024-04-16 18:03:19

我不太确定,但是当我在使用API时,我只需要存储modhash并将其与我的请求一起发送。另外,如果您使用的是requests模块,请改用会话实例,它将跨调用存储cookie。但我不知道这对Django有什么影响。以下是我为登录编写的代码:

def login(username, password):
    """logs into reddit, saves cookie"""

    print 'begin log in'
    #username and password
    UP = {'user': username, 'passwd': password, 'api_type': 'json',}
    headers = {'user-agent': '/u/STACKOVERFLOW\'s API python bot', }
    #POST with user/pwd
    client = requests.session()

    r = client.post('http://www.reddit.com/api/login', data=UP)

    #print r.text
    #print r.cookies

    #gets and saves the modhash
    j = json.loads(r.text) #I believe r.json == j at this point

    client.modhash = j['json']['data']['modhash']
    print '{USER}\'s modhash is: {mh}'.format(USER=username, mh=client.modhash)

    #pp2(j)

    return client

相关问题 更多 >