You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何浏览器可访问Quizlet接口,JS/Python代码请求却返回403错误

问题根因

你遇到的403错误是Quizlet接入的Cloudflare反爬虫防护拦截导致的,该防护会识别请求发起端的特征,只有符合真实浏览器特征的请求才会放行,和你携带的固定Header、Cookie没有直接关系:

  • 无痕模式能正常访问,是因为你用的是真实Chrome浏览器,请求的TLS指纹、HTTP2帧顺序、JS运行环境等特征完全符合Cloudflare的放行规则
  • 用Burp内置浏览器访问被拦,是因为Burp代理会修改请求的TLS指纹,同时Cloudflare可识别到请求来自代理工具,直接触发拦截
  • node-fetch、requests这类普通HTTP请求库的网络请求特征和真实浏览器差异极大,Cloudflare可直接识别拦截,你复制多少请求Header都没用,你代码里携带的Cookie也是抓包获取的临时有效Cookie,过期后完全失效

可行解决方案

方案1:使用带真实浏览器内核的请求工具(最稳定)

推荐用Playwright/Puppeteer这类自动化浏览器工具,调用真实Chromium内核发起请求,可直接绕过基础反爬。Python示例代码如下:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    context = browser.new_context(user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36")
    page = context.new_page()
    page.goto("https://quizlet.com/webapi/3.2/images/search?query=hello&perPage=2")
    # 直接获取接口返回的JSON数据
    res = page.evaluate("() => document.body.innerText")
    print(res)
    browser.close()

方案2:使用专门绕过Cloudflare的HTTP库

Python生态下的cloudscraper库已经封装了Cloudflare基础验证的绕过逻辑,可直接替换requests使用,无需启动浏览器,性能更高:

import cloudscraper

scraper = cloudscraper.create_scraper()
params = {'query': 'hello', 'perPage': '2'}
response = scraper.get('https://quizlet.com/webapi/3.2/images/search', params=params)
print(response.status_code)
print(response.json())

注意事项

  • 不要短时间内发起高频请求,否则会触发Cloudflare的交互式验证码,此时需要额外接入打码服务才能继续访问
  • 接口返回规则如果变动,需要及时调整请求逻辑

内容的提问来源于stack exchange,提问作者Duong Phan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:42:01