【问题标题】:Consecutive requests with python Requests.Session() not working使用 python Requests.Session() 的连续请求不起作用
【发布时间】:2013-09-07 21:27:23
【问题描述】:

我正在尝试这样做,

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

但是第二个 post 请求返回 404 错误,谁能帮我解释一下为什么?

【问题讨论】:

  • 它没有找到该页面。检查网址
  • 如果只运行第二个请求,一切正常吗?
  • 网址是正确的。 @zero323 秒请求仅对成功登录的用户可用。
  • @Paco 网址在浏览器中打开时是正确的
  • 在尝试了所有答案后,我发现这可行。 stackoverflow.com/a/41131985/2041707

标签: python python-requests


【解决方案1】:

在最新版本的requests中,sessions对象自带Cookie Persistence,查看请求Sessions ojbectsdocs。 所以你不需要人为地添加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

只需打印 cookie 即可查看您是否已登录。

for cookie in s.cookies:
    print (cookie.name, cookie.value)

示例网站是您的吗?
如果不是,则站点可能会拒绝机器人/爬虫!
您可以更改请求的用户代理,就像您使用浏览器一样。


例如:

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

【讨论】:

  • 添加用户代理标头不会覆盖包含已登录 cookie 的标头吗?当我这样做时,我得到一个页面,但它没有登录......
猜你喜欢
  • 1970-01-01
  • 2013-06-26
  • 2016-03-27
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-07
  • 2018-05-27
相关资源
最近更新 更多