网站需Cookie时,如何用curl在Windows恢复数据下载?
这个问题大概率是网站启用了反爬机制(比如Cloudflare的JS/Cookie验证),阻止了纯curl的无会话请求。可以试试以下几种方法恢复功能:
1. 复用浏览器会话Cookie
先通过浏览器获取有效Cookie,再用curl携带Cookie请求:
- 打开浏览器访问目标API地址,等待页面加载完成(如果有验证步骤就完成它)
- 按F12打开开发者工具,切换到「Network」标签,刷新页面,找到对应API请求,在「Request Headers」里复制
Cookie字段的值 - 把Cookie加到curl命令里:
curl.exe -H "Cookie: 这里替换成你复制的Cookie内容" https://www.theocc.com/mdapi/series-search?symbol_type=U&symbol=AA
或者用curl先获取网站的初始Cookie并保存,再复用:
# 先请求首页获取Cookie并保存到文件 curl.exe -c occ_cookies.txt https://www.theocc.com/ # 用保存的Cookie请求API curl.exe -b occ_cookies.txt https://www.theocc.com/mdapi/series-search?symbol_type=U&symbol=AA
2. 模拟完整的浏览器请求头
反爬机制通常会检查User-Agent等标识,加上浏览器的UA能提升请求的合法性:
curl.exe -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" -b occ_cookies.txt https://www.theocc.com/mdapi/series-search?symbol_type=U&symbol=AA
3. 使用支持JS渲染的工具
如果上面的方法都失效,说明网站需要执行JavaScript才能通过验证,这时候curl就无法处理了,得用支持无头浏览器的工具:
比如用Node.js的Playwright写个简单脚本:
const { chromium } = require('playwright'); (async () => { const browser = await chromium.launch(); const page = await browser.newPage(); // 访问API地址,自动处理JS验证 await page.goto('https://www.theocc.com/mdapi/series-search?symbol_type=U&symbol=AA'); // 等待API响应 const apiResponse = await page.waitForResponse(res => res.url().includes('series-search')); // 获取JSON数据 const jsonData = await apiResponse.json(); console.log(jsonData); await browser.close(); })();
运行前需要先安装Playwright:npm install playwright,再执行npx playwright install chromium。
或者用无头Chrome的命令行方式:
chrome.exe --headless=new --dump-dom https://www.theocc.com/mdapi/series-search?symbol_type=U&symbol=AA > response.json
注意事项
- 先确认网站的服务条款,避免自动化请求违反规定导致IP被封禁
- Cookie可能会过期,需要定期更新
内容的提问来源于stack exchange,提问作者Madhavi D
相关产品推荐
相关产品推荐

