【发布时间】:2012-03-28 16:54:04
【问题描述】:
我正在尝试创建一个外部 python 客户端来访问 django 应用程序。客户端应该对用户进行身份验证、生成 cookie 并能够像任何浏览器一样访问页面。
login_data_encoded = urllib.urlencode({'user':'sample', 'pass':'secret'})
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)
opener.open('http://localhost:8000/login', login_data_encoded) #problem here
response = opener.open('http://localhost:8000/secret_page')
secret_page = response.read()
在python解释器中:
import client
client.secret_page
--> []
但是页面是空的。我可以在浏览器中查看页面(以示例用户身份登录后,登录工作)。 Django 将我识别为匿名用户(因此由于权限,它不允许我查看示例用户的数据)可能是因为我还没有为用户启动 django 会话。如何通过客户端启动 django 会话? (不用浏览器)
我希望我已经说清楚了。
编辑 1:
它让我以匿名用户身份登录,有无斜线没有区别。代码或模板中没有 csrf。 Django 的日志显示 200 响应,并且在获取 secret_page 时也显示 200。 cj 包含 cookie 信息:
<cookielib.CookieJar[Cookie(version=0, name='app_r12', value='dd070f7acfe37c0474c223287c5adcbe', port=None, port_specified=False, domain='localhost.local', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={}, rfc2109=False)]>
opener.open(POST 的响应)的响应再次为 200,并且 url 是相同的。
【问题讨论】:
标签: python django session cookies