未通过浏览器 TLS/JA3 指纹的验证
- 在一次使用
python requests库
访问某个地址时,返回了403
错误,起初以为是 IP 被加入了黑名单,但经过测试后发现,切换 IP 后仍然返回403
。 - 测试过程中偶然发现浏览器和
postman
可以正常访问,经过搜索资料知道,大概率是因为没有通过浏览器 TLS/JA3 指纹的验证
被识别为爬虫,从而被禁止访问,可以通过以下三种常用方式解决。
使用httpx库(极力推荐)
代码语言:pyhton复制import httpx
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36",
}
res = httpx.get(url='https://www.baidu.com/', headers=headers, timeout=10, verify=False)
print(res.text)
使用 pyhttpx 库(推荐)
代码语言:pyhton复制import pyhttpx
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36",
}
session = pyhttpx.HttpSession()
res = session.get(url='https://www.baidu.com/',headers=headers)
print(res.text)
使用 curl_cffi 库(使用较少)
代码语言:pyhton复制from curl_cffi import requests
res = requests.get(url='https://www.baidu.com/',impersonate="chrome101")
print(res.text)
什么是 403 错误
- 在我们使用互联网浏览网站或进行网络请求时,有时会遇到一个称为“403 Forbidden”错误。这意味着服务器可以处理请求,但拒绝执行它。简而言之,没有权限访问所请求的资源。对于开发者和用户来说,了解这一错误及其解决方法非常重要。
造成 403 可能的原因
未授权的第三方访问
- 某些API和资源可能要求特定的API密钥或认证令牌,如果未提供或提供错误,则会返回403错误。
目录浏览被禁用
- 服务器配置禁止了目录浏览。如果请求的URL指向一个目录而不是具体文件,并且目录浏览被禁用,也会返回403错误。
黑名单和白名单设置
- 服务器可能使用黑名单或白名单来控制访问。请求的来源可能在黑名单上,因此被拒绝访问。
- 黑名单常见比如 IP 被加入黑名单、被识别为爬虫(频繁访问、未通过浏览器 TLS/JA3 指纹的验证)等等。
个人简介