python requests .status_code 返回的值不正确

1 投票
3 回答
3136 浏览
提问于 2025-04-18 05:17

在这里查看文档: http://docs.python-requests.org/en/latest/user/quickstart/

这个应该会打印出 200,而且确实打印了。

import requests
r = requests.get('http://souke.xdf.cn/Category/1-40-0-0.html?v=5&page=1&pagesize=50')
print r.status_code

这个应该会打印出 404,但它却打印了 200

import requests
r = requests.get('http://souke.xdf.cn/CategoryXXX/1-40-0-0.html?v=5&page=1&pagesize=50')
print r.status_code

这是为什么呢?

有没有其他方法可以识别 404 错误发生了?

3 个回答

0
.raise_for_status()
.status_code

如果返回的结果不是200,就会出现错误。

这样做比使用其他方法要好。

0

你要找的页面在服务器上找到了,所以服务器给了你一个200 OK的回应。这意味着一切正常。不过,你可以使用Requests库中的raise_for_status()这个功能,当服务器出现错误时,比如404(找不到页面)或401(未授权)等,它会抛出一个异常,让你知道出问题了。

import requests

>>>>r = requests.get('http://something.com/404/')
>>>>print r.status_code
404
>>>>r.raise_for_status()
Traceback (most recent call last):
File "requests/models.py", line 832, in raise_for_status
raise http_error
requests.exceptions.HTTPError: 404 Client Error
3

问题不在于 requests,而是在你访问的网站上。这个网站返回的是 200

你可以通过使用像Chrome开发者工具这样的工具来确认这一点,查看一下响应的头信息:

Request URL:http://souke.xdf.cn/CategoryXXX/1-40-0-0.html?v=5&page=1&pagesize=50
Request Method:GET
Status Code:200 OK

撰写回答