我正在尝试登录页面并访问页面中的其他链接。
payload={'username'=<username>,'password'=<password>}
with session() as s:
r = c.post(<URL>, data=payload)
print r
print r.content
这给了我一个&#34; 405 Not Allowed&#34;错误。 我使用chrome开发人员工具查看了post方法的详细信息,可以看到api(URL / api / auth)。 我使用有效负载发布到该URL,它正在运行,我得到的响应类似于我在开发人员中看到的内容。
不幸的是,在尝试“获得&#39;登录后的另一个网址,我仍然从登录页面获取内容。 为什么登录不坚持?我应该使用cookies吗? 我是新手,所以我真的不知道如何使用cookies。
答案 0 :(得分:35)
您可以使用会话对象。它存储cookie以便您提出请求,并为您处理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数据保存到外部文件,然后重新加载它们以保持会话持久性,而无需在每次运行脚本时登录:
答案 1 :(得分:13)
从响应中获取Cookie
url = 'http://example.com/some/cookie/setting/url'
r = requests.get(url)
r.cookies
{'example_cookie_name': 'example_cookie_value'}
在后续请求中将cookie返回给服务器
url = 'http://httpbin.org/cookies'
cookies = dict(cookies_are='working')
r = requests.get(url, cookies=cookies)`
答案 2 :(得分:5)
总结(@Freek Wiekmeijer,@gtalarico)其他人的回答:
authentication
才能访问,否则405 Not Allowed
authentication
=grant access
方法有:
cookie
auth header
Basic xxx
Authorization xxx
cookie
中的 requests
进行身份验证cookie
中手动设置headers
cookie
的自动处理requests
session
自动管理 cookieresponse.cookies
手动设置 cookierequests
的{{1}}自动管理cookiessession
curSession = requests.Session()
# all cookies received will be stored in the session object
payload={'username': "yourName",'password': "yourPassword"}
curSession.post(firstUrl, data=payload)
# internally return your expected cookies, can use for following auth
# internally use previously generated cookies, can access the resources
curSession.get(secondUrl)
curSession.get(thirdUrl)
的{{1}}requests