使用请求(urllib2 python)登录后获取受限页面
我正在尝试使用python请求登录页面使用请求(urllib2 python)登录后获取受限页面,python,python-2.7,python-requests,Python,Python 2.7,Python Requests,我正在尝试使用python请求登录页面 headers = { 'content-type': 'application/x-www-form-urlencoded', 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/33.0.1750.152 Chrome/33.0.1750.152 Safari/537.36' } dat
headers = {
'content-type': 'application/x-www-form-urlencoded',
'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/33.0.1750.152 Chrome/33.0.1750.152 Safari/537.36'
}
data = {
'username':myusername,
'password':mypassword,
}
r = requests.post(url,data=data,headers=headers)
我试图通过print r
输出是
,但html页面是登录页面,但我希望登录后我们会重定向到其他页面的html。登录表单包含几个隐藏字段:
<input type="hidden" name="lt" value="LT-1314930-GPfgUfyUj5eRY4RCaoa1Xi3gi5Jfsf" />
<input type="hidden" name="execution" value="e3s1" />
<input type="hidden" name="_eventId" value="submit" />
登录表单包含多个隐藏字段:
<input type="hidden" name="lt" value="LT-1314930-GPfgUfyUj5eRY4RCaoa1Xi3gi5Jfsf" />
<input type="hidden" name="execution" value="e3s1" />
<input type="hidden" name="_eventId" value="submit" />
两件事:
1.对于您的登录请求,响应代码为200并不意味着它成功了。可能是开发人员出于任何原因没有遵循REST准则,返回一个200,其主体指示错误
username:adb
password:asdf
lt:LT-1315009-vg7Xm5MTSfBYkGNuaiUbAFZqVZNmoP
execution:e2s1
_eventId:submit
submit:LOGIN
username:adb
password:asdf
lt:LT-1315009-vg7Xm5MTSfBYkGNuaiUbAFZqVZNmoP
execution:e2s1
_eventId:submit
submit:LOGIN
我怀疑其中一些是反CSRF令牌,您可能需要从最初收到的登录页面中刮取,但不管怎样,我认为登录请求不会通过,除非您为每个字段提供正确的值。您的浏览器会话显示
lt
和执行
字段都因会话而异,需要提供。您的浏览器会话显示lt
和执行
字段在每个会话中都有所不同,需要提供。哇!!这个工具看起来很神奇。但我现在该怎么办呢。我在这里迷路了。我是否仍然需要在程序中使用requests/urllib,或者robobrowser可以独自完成所有事情。如果你能给我一个提示,告诉我怎么做就好了。我试图查看robobrowser教程,但我发现API.robobrowser相对较新,所以示例代码仍然很少。你真的不需要其他东西了。您可以将原始响应对象作为browser.state.response
。谢谢:)我使用browser.parsed
获取完整文本。对吗?我还有一个问题。robobrowser会自动维护会话吗?我不想每次都登录。类似于requests.Session()
Yes,.parsed
是美丽的组解析树。browser
对象也有几种方法可供搜索(如find()
和find\u all
和select
)。Robobrowser在引擎盖下使用请求会话。哇!!这个工具看起来很神奇。但我现在该怎么办呢。我在这里迷路了。我是否仍然需要在程序中使用requests/urllib,或者robobrowser可以独自完成所有事情。如果你能给我一个提示,告诉我怎么做就好了。我试图查看robobrowser教程,但我发现API.robobrowser相对较新,所以示例代码仍然很少。你真的不需要其他东西了。您可以将原始响应对象作为browser.state.response
。谢谢:)我使用browser.parsed
获取完整文本。对吗?我还有一个问题。robobrowser会自动维护会话吗?我不想每次都登录。类似于requests.Session()
Yes,.parsed
是美丽的组解析树。browser
对象也有几种方法可供搜索(如find()
和find\u all
和select
)。Robobrowser在引擎盖下使用请求会话。不应设置内容类型标头;请求将根据表格的要求为您处理。帖子默认为application/x-www-form-urlencoded
。您不应该设置内容类型标题;请求将根据表格的要求为您处理。帖子默认为application/x-www-form-urlencoded
。