使用请求(urllib2 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

我正在尝试使用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'
}

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,其主体指示错误

  • 当我尝试登录到你提供的网站,并启用了我的Chrome开发者工具时,我检查了流量,发现该网站传输的不仅仅是用户名和密码。具体而言,还有4个其他字段:

    username:adb  
    password:asdf    
    lt:LT-1315009-vg7Xm5MTSfBYkGNuaiUbAFZqVZNmoP   
    execution:e2s1   
    _eventId:submit   
    submit:LOGIN
    
  • 我怀疑其中一些是反CSRF令牌,您可能需要从最初收到的登录页面中删除这些令牌,但无论如何,我认为登录请求不会通过,除非您为每个字段提供正确的值。

    两件事: 1.对于您的登录请求,响应代码为200并不意味着它成功了。可能是开发人员出于任何原因没有遵循REST准则,返回一个200,其主体指示错误

  • 当我尝试登录到你提供的网站,并启用了我的Chrome开发者工具时,我检查了流量,发现该网站传输的不仅仅是用户名和密码。具体而言,还有4个其他字段:

    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