如何在Linux命令行用wget/curl下载需合规验证的网站源码?
解决方法:针对年龄验证类网站的命令行爬取方案
首先明确:没有通用的URL传参方式能绕过这类验证,因为不同网站的年龄/合规验证逻辑差异极大——它们几乎不会依赖简单的URL参数(你试过的TRUE参数没用就是这个原因),大多是靠Cookie、本地存储或者后端会话来记录你的同意状态。
下面是具体的实操步骤,用curl/wget就能搞定大部分情况:
第一步:抓包分析验证逻辑
打开浏览器的开发者工具(F12),切换到「Network」面板,然后点击页面上的「ENTER」按钮,观察发生的请求:- 很多网站会直接设置一个Cookie(比如
age_verified=1、adult_confirmed=true这类键值对),之后所有请求都会带上这个Cookie来证明你已验证; - 少数网站会发送一个POST请求到某个接口(比如
/api/verify-age),提交同意状态,后端返回Set-Cookie头来记录会话。
- 很多网站会直接设置一个Cookie(比如
第二步:用curl/wget模拟验证状态
- 如果是Cookie验证:
- 先在浏览器里完成验证,然后在开发者工具的「Application」→「Cookies」里找到对应的验证Cookie,复制键值对;
- 用curl的话直接带上Cookie参数:
curl --cookie "age_verified=1; adult_confirmed=true" https://目标网站地址 - 用wget的话,可以把Cookie保存到文本文件(比如
cookies.txt),然后加载:wget --load-cookies cookies.txt https://目标网站地址
- 如果是POST请求验证:
- 先发送POST请求完成验证,同时保存Cookie到本地文件,再用这个Cookie请求目标页面:
# 先发送验证请求,保存Cookie到cookie.jar curl -X POST -d "agree=yes&age=18+" https://目标网站/verify-endpoint --cookie-jar cookie.jar # 用保存的Cookie请求目标页面 curl --cookie cookie.jar https://目标网站地址
- 先发送POST请求完成验证,同时保存Cookie到本地文件,再用这个Cookie请求目标页面:
- 如果是Cookie验证:
额外注意事项
- 有些网站会检查请求的User-Agent,避免被识别为命令行工具,所以可以加上浏览器的UA:
curl --user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" --cookie "age_verified=1" https://目标网站地址 - 如果网站用了复杂的JS生成验证令牌(比如动态的CSRF token),单纯用curl/wget可能搞不定,这时候得用无头浏览器先自动点击验证按钮,再获取页面源码,但这已经不属于wget/curl的范畴了。
- 有些网站会检查请求的User-Agent,避免被识别为命令行工具,所以可以加上浏览器的UA:
内容的提问来源于stack exchange,提问作者rider
相关产品推荐
相关产品推荐

