使用python Requests.Session()的连续请求不起作用

May*_*Jha 3 python python-requests

我试图这样做,

import requests
s=requests.Session()
login_data = dict(userName='user', password='pwd')
ra=s.post('http://example/checklogin.php', data=login_data)
print ra.content
print ra.headers
ans = dict(answer='5')
f=s.cookies
r=s.post('http://example/level1.php',data=ans,cookies=f)
print r.content
Run Code Online (Sandbox Code Playgroud)

但第二个帖子请求返回404错误,有人可以帮助我吗?

atu*_*pal 5

在最新版本中requests,他会话对象是Cookie Persistence,查看请求Sessions ojbects docs.
所以你不需要人工添加cookie.只是

import requests
s=requests.Session()
login_data = dict(userName='user', password='pwd')
ra=s.post('http://example/checklogin.php', data=login_data)
print ra.content
print ra.headers
ans = dict(answer='5')
r=s.post('http://example/level1.php',data=ans)
print r.content
Run Code Online (Sandbox Code Playgroud)

只需打印cookie即可查找您记录的内容.

for cookie in s.cookies:
    print (cookie.name, cookie.value)
Run Code Online (Sandbox Code Playgroud)

示例网站是你的吗?
如果没有,也许网站拒绝机器人/爬虫!
您可以更改请求的用户代理,因为您正在使用浏览器.


例如:

import requests
s=requests.Session()
headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36'
}
login_data = dict(userName='user', password='pwd')
ra=s.post('http://example/checklogin.php', data=login_data, headers = headers)
print ra.content
print ra.headers
ans = dict(answer='5')
r=s.post('http://example/level1.php',data=ans, headers = headers)
print r.content
Run Code Online (Sandbox Code Playgroud)

祝你好运〜

  • 添加用户代理标头不会覆盖包含登录 cookie 的标头吗?当我这样做时,我得到一个页面,但它没有登录...... (2认同)