2015-07-22 71 views
9

我正在尝试登录到页面并访问页面中的另一个链接。如何在Python请求中使用cookie

payload={'username'=<username>,'password'=<password>} 
with session() as s: 
    r = c.post(<URL>, data=payload) 
    print r 
    print r.content 

这是给我一个“405不允许”的错误。 我使用Chrome开发人员工具检查了post方法的详细信息,并可以看到api(URL/api/auth)。 我发布到该URL与有效载荷,它正在工作,我得到的响应类似于我在开发人员可以看到的。

不幸的是,当登录后尝试“获取”另一个网址时,我仍然从登录页面获取内容。 为什么登录不会粘住?我应该使用Cookie吗? 我是一个新手,所以我真的不知道如何使用cookie。

回答

6

documentation:从响应

  1. 帮助获取Cookie

    url = 'http://example.com/some/cookie/setting/url' 
    r = requests.get(url) 
    r.cookies 
    

    {'example_cookie_name': 'example_cookie_value'}

  2. 给饼干回服务器上的后续请求

    url = 'http://httpbin.org/cookies' 
    cookies = dict(cookies_are='working') 
    r = requests.get(url, cookies=cookies)` 
    
+0

谢谢。实际上,似乎没有创建的Cookie。我检查了请求标题,看不到任何'cookies'。同时,在响应标题中创建一个cookie。如果没有cookie,我如何制作登录棒。 – user1474157

+0

认证cookie的正常流程是:(1)当您提交登录表单时,您会在响应头文件中收到一个cookie。 (2)在后续页面请求中,将Cookie添加到请求标头。 –

14

您可以使用会话对象。它存储的cookie,所以你可以提出请求,它处理的饼干给你

s = requests.Session() 
# all cookies received will be stored in the session object 

s.post('http://www...',data=payload) 
s.get('http://www...') 

文档:http://docs.python-requests.org/en/latest/user/advanced/

您也可以将Cookie数据保存到外部文件,然后重新装入他们保持会话每次运行脚本时无需登录:

How to save requests (python) cookies to a file?