【问题标题】:python requests - 403 forbiddenpython请求 - 403禁止
【发布时间】:2015-01-15 15:12:29
【问题描述】:

我有这个

payload = {'from':'me', 'lang':lang, 'url':csv_url}
headers = {
   'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11'
}

api_url = 'http://dev.mypage.com/app/import/'
sent = requests.get(api_url , params=payload, headers=headers)

我只是不断收到403。我在看this requests docs

我做错了什么?

更新

网址只接受登录用户。我如何通过请求登录那里?

【问题讨论】:

  • "您首先需要确认您是否遇到了“无目录浏览”的问题。如果 URL 以斜杠 '/' 结尾而不是特定网页的名称(例如 .htm 或 .html)。如果这是您的问题,那么您别无选择,只能直接访问该网站的各个网页。”通过checkupdown.com/status/E403.html。您也可以访问该页面。会不会是 CORS 问题?
  • 问题似乎不在于您使用 requests 包的方式,而可能是 API。
  • @mattm 是的,我认为 API 不接受它... :(
  • @Craicerjack 你是完全正确的:) 这是一个需要登录的页面。我现在该如何克服这个问题?

标签: python python-requests


【解决方案1】:

这是通常使用Session 对象的方式:

# start new session to persist data between requests
session = requests.Session()

# log in session
response = session.post(
    'http://dev.mypage.com/login/',
    data={'user':'username', 'password':'12345'}
)

# make sure log in was successful
if not 200 <= response.status_code < 300:
    raise Exception("Error while logging in, code: %d" % response. status_code)

# ... use session object to make logged-in requests, your example:
api_url = 'http://dev.mypage.com/app/import/'
sent = session.get(api_url , params=payload, headers=headers)

您显然应该根据您的使用场景进行调整。

之所以需要会话,是因为 HTTP 协议没有会话的概念,所以会话是通过 HTTP 实现的。

【讨论】:

  • 您是否使用会话对象进行第二次请求?
  • 是的,我正在使用会话对象。我什至在内部使用with
  • 网站可能不允许您登录,但在登录失败时返回 200。看看是不是这样。
  • 我做了print session.cookies._cookies,它是空的。它对你说了什么吗?
  • 好吧,只是你没有登录...尝试使用浏览器(类似firebug的东西可以工作)看看当你手动执行此操作时会发生什么。
猜你喜欢
  • 2016-11-24
  • 1970-01-01
  • 2022-01-18
  • 2014-10-31
  • 2012-02-03
  • 2016-08-17
  • 2010-09-27
  • 2019-01-26
相关资源
最近更新 更多