从这里开始上强度了!!!先看‘形象比喻’。
📚 学习建议
初学路径
-
先理解概念 → 阅读"核心概念讲解",理解7个参数的作用
-
运行示例 → 跑起来代码,看到实际效果
-
逐个测试 → 按顺序测试4个功能:图片拦截 → 网站拦截 → 请求头修改 → API请求
-
查看日志 → 对照日志和代码,理解执行流程
-
动手修改 → 改改代码,比如改变拦截的URL,加入自己的逻辑
进阶练习
-
实现白名单模式(只允许访问指定网站)
-
添加访问时间限制(工作时间禁止视频网站)
-
记录所有访问历史到文件
-
实现简单的家长控制系统
1️⃣ 什么是自定义请求处理?
这是JCEF的另一个强大功能。简单理解:当浏览器要加载网页、图片、CSS等资源时,可以在Java中"拦截"这些请求,然后:
-
查看请求的详细信息
-
修改请求(比如添加请求头)
-
阻止某些请求
-
自己提供内容(不从网络加载)
-
创建自定义协议(比如
myapp://而不是http://)
🤔 形象比喻
想象浏览器是一个外卖员:
-
用户点击链接 = 顾客下单
-
浏览器发出请求 = 外卖员去取餐
-
RequestHandler(请求处理器) = 调度员,可以:
-
查看订单内容
-
修改送餐地址
-
取消某些订单
-
自己做餐(不去餐厅取)
-
2️⃣ 创建一个完整的示例
创建新文件 RequestInterceptDemo.java:
package cn.why;
import me.friwi.jcefmaven.CefAppBuilder;
import me.friwi.jcefmaven.MavenCefAppHandlerAdapter;
import org.cef.CefApp;
import org.cef.CefClient;
import org.cef.browser.CefBrowser;
import org.cef.browser.CefFrame;
import org.cef.handler.CefRequestHandlerAdapter;
import org.cef.handler.CefResourceRequestHandler;
import org.cef.misc.BoolRef;
import org.cef.network.CefRequest;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.FileWriter;
import java.util.HashMap;
import java.util.Map;
public class O3_RequestInterceptDemo {
private static CefBrowser browser;
private static JTextArea logArea;
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGUI());
}
private static void createAndShowGUI() {
System.out.println("🚀 开始创建GUI");
JFrame frame = new JFrame("JCEF 请求拦截演示");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1400, 900);
frame.setLayout(new BorderLayout());
try {
CefAppBuilder builder = new CefAppBuilder();
builder.setAppHandler(new MavenCefAppHandlerAdapter() {
@Override
public void stateHasChanged(CefApp.CefAppState state) {
if (state == CefApp.CefAppState.TERMINATED) {
System.exit(0);
}
}
});
builder.getCefSettings().windowless_rendering_enabled = false;
CefApp cefApp = builder.build();
CefClient client = cefApp.createClient();
client.addRequestHandler(new CefRequestHandlerAdapter() {
@Override
public CefResourceRequestHandler getResourceRequestHandler(
CefBrowser browser, CefFrame frame, CefRequest request,
boolean isNavigation, boolean isDownload,
String requestInitiator, BoolRef disableDefaultHandling) {
String url = request.getURL();
String method = request.getMethod();
log("📡 [" + method + "] " + url);
if (url.contains("blocked.jpg") || url.contains("blocked.png")) {
log("🚫 阻止加载: " + url);
disableDefaultHandling.set(true);
return null;
}
if (url.contains("baidu.com") || url.contains("api")) {
Map<String, String> headerMap = new HashMap<>();
request.getHeaderMap(headerMap);
headerMap.put("X-Custom-Header", "From-Java-JCEF");
headerMap.put("X-My-Token", "my-secret-token-12345");
request.setHeaderMap(headerMap);
log("🔧 添加自定义请求头");
}
return null;
}
@Override
public boolean onBeforeBrowse(CefBrowser browser, CefFrame frame,
CefRequest request, boolean userGesture,
boolean isRedirect) {
String url = request.getURL();
if (url.contains("example.com") && !url.contains("api.example.com")) {
log("⛔ 阻止访问网站: " + url);
SwingUtilities.invokeLater(() -> JOptionPane.showMessageDialog(null,
"该网站已被阻止访问!\n" + url, "访问被阻止", JOptionPane.WARNING_MESSAGE));
return true;
}
log("✅ 允许导航: " + url);
return false;
}
});
browser = client.createBrowser("about:blank", false, false);
JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
splitPane.setTopComponent(browser.getUIComponent());
splitPane.setBottomComponent(createLogPanel());
splitPane.setDividerLocation(600);
frame.add(createControlPanel(), BorderLayout.NORTH);
frame.add(splitPane, BorderLayout.CENTER);
frame.setVisible(true);
System.out.println("✅✅✅ 窗口已显示!");
new Timer(2000, e -> {
System.out.println("⏰ 定时器触发");
try {
File htmlFile = createTestHTML();
browser.loadURL(htmlFile.toURI().toString());
log("📄 测试页面已加载");
} catch (Exception ex) {
ex.printStackTrace();
}
((Timer) e.getSource()).stop();
}).start();
} catch (Exception e) {
System.out.println("❌ 异常: " + e.getMessage());
e.printStackTrace();
}
}
private static File createTestHTML() throws Exception {
File tempFile = File.createTempFile("request_test", ".html");
tempFile.deleteOnExit();
String html = """
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>请求拦截测试</title>
<style>
body {
font-family: 'Microsoft YaHei', Arial;
padding: 30px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
}
.container {
max-width: 900px;
margin: 0 auto;
background: rgba(255,255,255,0.1);
padding: 30px;
border-radius: 10px;
}
h1 { text-align: center; }
.box {
background: rgba(255,255,255,0.2);
padding: 20px;
margin: 15px 0;
border-radius: 8px;
}
button {
background: #4CAF50;
color: white;
border: none;
padding: 12px 24px;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
margin: 5px;
}
button:hover { background: #45a049; }
button.danger { background: #f44336; }
button.danger:hover { background: #da190b; }
#result {
margin-top: 20px;
padding: 15px;
background: rgba(0,0,0,0.3);
border-radius: 5px;
min-height: 50px;
}
img {
max-width: 200px;
border: 3px solid white;
border-radius: 5px;
}
.info {
background: rgba(33, 150, 243, 0.3);
padding: 10px;
border-radius: 5px;
margin: 10px 0;
}
</style>
</head>
<body>
<div class="container">
<h1>🔌 JCEF 请求拦截测试</h1>
<div class="box">
<h2>📋 功能说明</h2>
<div class="info">
<p>✅ 所有请求都会被Java拦截并记录在下方日志中</p>
<p>✅ 访问百度时会自动添加自定义请求头</p>
<p>✅ 尝试加载blocked图片会被阻止</p>
<p>✅ 尝试访问example.com会被阻止</p>
</div>
</div>
<div class="box">
<h2>1️⃣ 测试图片拦截</h2>
<p>尝试加载这张图片(会被阻止):</p>
<img src="blocked.jpg" onerror="this.alt='❌ 图片被Java阻止加载'" alt="加载中...">
<br>
<button onclick="loadImage()">重新加载图片</button>
</div>
<div class="box">
<h2>2️⃣ 测试网站拦截</h2>
<button class="danger" onclick="loadBlockedSite()">访问 example.com(会被阻止)</button>
<div id="result"></div>
</div>
<div class="box">
<h2>3️⃣ 测试请求头修改</h2>
<p>访问百度时,Java会自动添加自定义请求头</p>
<button onclick="loadBaidu()">访问百度(查看日志)</button>
</div>
<div class="box">
<h2>4️⃣ 测试API请求</h2>
<p>发送API请求时会添加Token</p>
<button onclick="fetchAPI()">发送API请求</button>
</div>
</div>
<script>
function loadImage() {
const img = document.querySelector('img');
img.src = 'blocked.jpg?' + Date.now();
}
function loadBlockedSite() {
document.getElementById('result').innerHTML = '⏳ 正在尝试访问 example.com...';
setTimeout(() => window.location.href = 'https://www.example.com', 500);
}
function loadBaidu() {
document.getElementById('result').innerHTML = '⏳ 正在访问百度...';
setTimeout(() => window.location.href = 'https://www.baidu.com', 500);
}
function fetchAPI() {
document.getElementById('result').innerHTML = '⏳ 发送API请求...';
fetch('https://api.example.com/data')
.then(() => document.getElementById('result').innerHTML = '✅ API请求已发送')
.catch(() => document.getElementById('result').innerHTML = '⚠️ API请求失败(正常现象)');
}
console.log('📄 测试页面已加载');
</script>
</body>
</html>
""";
try (FileWriter writer = new FileWriter(tempFile)) {
writer.write(html);
}
return tempFile;
}
private static JPanel createControlPanel() {
JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));
panel.setBackground(new Color(50, 50, 50));
JButton btn1 = new JButton("🔄 重新加载");
btn1.addActionListener(e -> browser.reload());
JButton btn2 = new JButton("🧹 清空日志");
btn2.addActionListener(e -> { logArea.setText(""); log("日志已清空"); });
JButton btn3 = new JButton("🌐 访问百度");
btn3.addActionListener(e -> { log("访问百度..."); browser.loadURL("https://www.baidu.com"); });
JButton btn4 = new JButton("🏠 返回测试页");
btn4.addActionListener(e -> {
try {
browser.loadURL(createTestHTML().toURI().toString());
log("返回测试页");
} catch (Exception ex) {
ex.printStackTrace();
}
});
panel.add(btn1);
panel.add(btn2);
panel.add(btn3);
panel.add(btn4);
return panel;
}
private static JScrollPane createLogPanel() {
logArea = new JTextArea();
logArea.setEditable(false);
logArea.setBackground(Color.BLACK);
logArea.setForeground(Color.GREEN);
logArea.setFont(new Font("Consolas", Font.PLAIN, 13));
JScrollPane scrollPane = new JScrollPane(logArea);
scrollPane.setBorder(BorderFactory.createTitledBorder("📜 请求拦截日志"));
log("=== JCEF 请求拦截系统已启动 ===");
log("等待拦截请求...\n");
return scrollPane;
}
private static void log(String message) {
String timestamp = String.format("[%tT]", System.currentTimeMillis());
String logMessage = timestamp + " " + message;
SwingUtilities.invokeLater(() -> {
logArea.append(logMessage + "\n");
logArea.setCaretPosition(logArea.getDocument().getLength());
});
System.out.println(logMessage);
}
}
功能总结:
|
功能 |
使用的方法 |
关键操作 |
返回值/设置 |
实际应用 |
|
图片拦截 |
|
|
返回 |
广告拦截、隐私保护 |
|
网站拦截 |
|
|
返回 |
家长控制、企业限制 |
|
请求头修改 |
|
|
返回 |
统一认证、追踪ID |
|
API请求 |
|
|
返回 |
API Token、密钥 |
代码讲解:
-
图片拦截
完整流程图
用户点击按钮 → JavaScript执行 → 浏览器尝试加载图片 → Java拦截请求 → 阻止加载 → 图片失败
第一步:用户点击"重新加载图片"按钮
HTML代码(在 createTestHTML() 方法中)
<button onclick="loadImage()">重新加载图片</button>
发生了什么:
-
用户点击绿色按钮
-
触发
onclick事件 -
调用JavaScript函数
loadImage()
第二步:JavaScript尝试加载图片
JavaScript代码(也在HTML中)
function loadImage() { const img = document.querySelector('img'); // 1. 找到页面上的<img>标签 img.src = 'blocked.jpg?' + Date.now(); // 2. 修改src属性,添加时间戳 }
详细解释:
-
找到图片元素:
const img = document.querySelector('img');
-
找到HTML中的
<img>标签
2. 修改图片地址:
img.src = 'blocked.jpg?' + Date.now();
-
'blocked.jpg'- 图片文件名 -
?- 添加查询参数 -
Date.now()- 当前时间戳(例如:1770832244864) -
最终结果:
blocked.jpg?1770832244864
为什么要加时间戳:
-
防止浏览器缓存
-
每次点击都是"新"请求
-
浏览器会重新尝试加载
完整URL:
file:///C:/Users/why/AppData/Local/Temp/blocked.jpg?1770832244864
-
file://- 协议(本地文件) -
/C:/Users/why/AppData/Local/Temp/- 临时文件夹路径 -
blocked.jpg- 文件名 -
?1770832244864- 时间戳参数
第三步:浏览器发起GET请求
浏览器内部:
-
看到
img.src改变 -
准备发起HTTP GET请求
-
构建完整URL
-
准备加载图片
第四步:Java拦截到这个请求
Java代码(在 getResourceRequestHandler() 方法中)
@Override
public CefResourceRequestHandler getResourceRequestHandler(
CefBrowser browser,
CefFrame frame,
CefRequest request, // ← 这里包含请求的所有信息
boolean isNavigation,
boolean isDownload,
String requestInitiator,
BoolRef disableDefaultHandling) { // ← 这个用来阻止请求
// 第1步:获取请求的URL
String url = request.getURL();
// url = "file:///C:/Users/why/AppData/Local/Temp/blocked.jpg?1770832244864"
// 第2步:获取请求方法
String method = request.getMethod();
// method = "GET"
// 第3步:记录日志
log("📡 [" + method + "] " + url);
// 输出:📡 [GET] file:///C:/Users/why/AppData/Local/Temp/blocked.jpg?1770832244864
详细解释每一步:
第1步:获取URL
String url = request.getURL();
-
request是一个包含请求信息的对象 -
getURL()方法返回完整的请求地址 -
此时
url的值是:"file:///C:/Users/why/AppData/Local/Temp/blocked.jpg?1770832244864"
第2步:获取请求方法
String method = request.getMethod();
-
获取HTTP方法(GET、POST、PUT等)
-
加载图片通常是
GET请求
第3步:记录日志
log("📡 [" + method + "] " + url);
-
调用
log()方法输出日志 -
输出到控制台和日志窗口
-
显示:
[01:50:44] 📡 [GET] file:///C:/Users/why/AppData/Local/Temp/blocked.jpg?1770832244864
第五步:检查是否要阻止(关键!)
// 检查URL是否包含 "blocked.jpg" 或 "blocked.png"
if (url.contains("blocked.jpg") || url.contains("blocked.png")) {
// 步骤A:记录阻止日志
log("🚫 阻止加载: " + url);
// 步骤B:设置阻止标志(最关键!)
disableDefaultHandling.set(true);
// 步骤C:返回null(不提供自定义处理)
return null;
}
return null; // 默认:正常处理
}
详细解释:
判断条件
if (url.contains("blocked.jpg") || url.contains("blocked.png"))
url.contains("blocked.jpg") 的工作原理:
url = "file:///C:/Users/why/AppData/Local/Temp/blocked.jpg?1770832244864"
url.contains("blocked.jpg")
// 检查这个字符串里是否包含 "blocked.jpg"
// 结果:true(包含)
因为:
file:///C:/Users/why/AppData/Local/Temp/blocked.jpg?1770832244864 ^^^^^^^^^^^ 找到了!
步骤A:记录阻止日志
log("🚫 阻止加载: " + url);
-
输出:
[01:50:44] 🚫 阻止加载: file:///C:/Users/why/AppData/Local/Temp/blocked.jpg?1770832244864 -
这就是你在控制台看到的第二行日志
步骤B:设置阻止标志(核心!)
disableDefaultHandling.set(true);
这是最关键的一行!
disableDefaultHandling 是什么:
-
类型:
BoolRef(布尔值的引用) -
作用:告诉浏览器"不要用默认方式处理这个请求"
为什么用 BoolRef 而不是 boolean:
// 错误方式(不起作用)
boolean disable = true; // 这只是局部变量,浏览器看不到
// 正确方式
disableDefaultHandling.set(true); // 这会真正通知浏览器
BoolRef 的工作原理:
// BoolRef 是一个容器,可以传递引用
BoolRef disableDefaultHandling = new BoolRef(false); // 初始值false
// Java代码修改它
disableDefaultHandling.set(true); // 设置为true
// 浏览器引擎读取它
if (disableDefaultHandling.get()) {
// 哦,Java告诉我不要加载这个资源
// 我停止加载!
}
步骤C:返回null
return null;
返回值的含义:
|
返回值 |
含义 |
|
|
使用默认处理(或者被阻止) |
|
|
使用自定义处理器(可以返回自己的内容) |
在这里:
-
返回
null -
加上
disableDefaultHandling.set(true) -
结果:彻底阻止加载,不提供任何内容
第六步:浏览器接收阻止信号
浏览器内部处理:
-
浏览器:我要加载 blocked.jpg
-
Java:不行!disableDefaultHandling = true
-
浏览器:好的,我停止加载
-
浏览器:触发图片的 onerror 事件
第七步:触发onerror事件HTML代码
<img src="blocked.jpg"
onerror="this.alt='❌ 图片被Java阻止加载'"
alt="加载中...">
onerror 的作用 : 当图片加载失败时触发 执行:this.alt='❌ 图片被Java阻止加载' this 指向这个 <img> 标签 alt是图片的替代文本 结果 : 图片显示:❌ 图片被Java阻止加载
完整时间线:
|
时间 |
事件 |
代码位置 |
|
01:50:44.000 |
用户点击按钮 |
HTML: `οnclick="loadImage()"` |
|
01:50:44.001 |
JavaScript修改src |
JS: `img.src = 'blocked.jpg?...'` |
|
01:50:44.002 |
浏览器发起请求 |
浏览器内部 |
|
01:50:44.003 |
Java拦截请求 |
Java: `getResourceRequestHandler()` |
|
01:50:44.004 |
记录第一行日志 |
Java: `log("📡 [GET] ...")` |
|
01:50:44.005 |
检查URL包含blocked |
Java: `if (url.contains("blocked.jpg"))` |
|
01:50:44.006 |
记录第二行日志 |
Java: `log("🚫 阻止...")` |
|
01:50:44.007 |
设置阻止标志 |
Java: `disableDefaultHandling.set(true)` |
|
01:50:44.008 |
浏览器停止加载 |
浏览器内部 |
|
01:50:44.009 |
触发onerror |
HTML: `οnerrοr="..."` |
|
01:50:44.010 |
显示错误文本 |
页面显示"❌ 图片被Java阻止加载" |
控制台日志:
[01:50:44] 📡 [GET] file:///C:/Users/why/AppData/Local/Temp/blocked.jpg?1770832244864 [01:50:44] 🚫 阻止加载: file:///C:/Users/why/AppData/Local/Temp/blocked.jpg?1770832244864
对应的Java代码:
// 第一行日志 log("📡 [" + method + "] " + url); // 输出:📡 [GET] file:///C:/Users/why/AppData/Local/Temp/blocked.jpg?1770832244864 // 第二行日志 log("🚫 阻止加载: " + url); // 输出:🚫 阻止加载: file:///C:/Users/why/AppData/Local/Temp/blocked.jpg?1770832244864
如果不阻止会怎样?
假设注释掉阻止代码:
// if (url.contains("blocked.jpg")) { // log("🚫 阻止加载: " + url); // disableDefaultHandling.set(true); // return null; // }
流程变化:
-
✅ 用户点击按钮
-
✅ JavaScript修改src
-
✅ 浏览器发起请求
-
✅ Java拦截请求
-
✅ 记录日志:
📡 [GET] ... -
❌ 不检查URL,不阻止
-
✅ 浏览器尝试加载
blocked.jpg -
❌ 文件不存在(因为我们没创建这个文件)
-
✅ 浏览器加载失败
-
✅ 触发onerror
-
✅ 显示"❌ 图片被Java阻止加载"
区别:
-
有阻止:Java主动阻止,浏览器不尝试加载
-
无阻止:浏览器尝试加载,但文件不存在自然失败
总结
这个例子展示了完整的请求拦截 → 判断 → 阻止流程:
-
✅ JavaScript发起请求
-
✅ Java拦截到请求
-
✅ Java检查URL
-
✅ Java设置阻止标志
-
✅ 浏览器停止加载
-
✅ 页面显示错误
核心代码就是这一行:
java
disableDefaultHandling.set(true); // 阻止加载!
-
网站拦截
操作一下:
-
在页面上找到 "2️⃣ 测试网站拦截" 区域
-
点击红色按钮:"访问 example.com(会被阻止)"
会看到:
-
弹出一个警告对话框:"该网站已被阻止访问!"
-
控制台日志显示:
⛔ 阻止访问网站:https://www.example.com -
页面不会跳转到 example.com
完整流程图
用户点击按钮 → JavaScript设置跳转 → 浏览器准备导航 → Java拦截导航 → 返回true阻止 → 弹出警告 → 停止跳转
第一步:用户点击红色按钮
<button class="danger" onclick="loadBlockedSite()"> 访问 example.com(会被阻止) </button>
发生了什么:
-
用户点击红色按钮(class="danger"让按钮变红色)
-
触发
onclick事件 -
调用JavaScript函数
loadBlockedSite()
第二步:JavaScript准备跳转
function loadBlockedSite() { // 第1步:在页面上显示提示 document.getElementById('result').innerHTML = '⏳ 正在尝试访问 example.com...'; // 第2步:延迟500毫秒后跳转 setTimeout(() => { window.location.href = 'https://www.example.com'; }, 500); }
详细解释:
第1步:显示提示信息
document.getElementById('result').innerHTML = '⏳ 正在尝试访问 example.com...';
-
document.getElementById('result')- 找到id为'result'的div -
.innerHTML = ...- 修改div里的HTML内容 -
显示:"⏳ 正在尝试访问 example.com..."
对应的HTML:
<div id="result"></div>
第2步:延迟后跳转
setTimeout(() => { window.location.href = 'https://www.example.com'; }, 500); ``` **`setTimeout` 的作用**: - 延迟执行代码 - `500` 表示500毫秒(0.5秒) - 让用户能看到"正在尝试访问"的提示 **`window.location.href = '...'` 的作用**: - 修改当前页面的URL - 触发页面导航(跳转) - 类似于你在地址栏输入网址后按回车 **时间线**: ``` 0ms: 用户点击按钮 1ms: 显示"正在尝试访问..." 500ms: 执行 window.location.href = 'https://www.example.com' 501ms: 浏览器准备跳转
第三步:浏览器准备导航
浏览器内部:
-
检测到
window.location.href改变 -
解析新URL:
https://www.example.com -
准备离开当前页面
-
准备导航到新页面
注意:此时还没有真正跳转,只是准备跳转
第四步:Java拦截导航(关键!)
这次不是 getResourceRequestHandler(),而是 onBeforeBrowse()!
@Override public boolean onBeforeBrowse( CefBrowser browser, // 浏览器对象 CefFrame frame, // 框架对象 CefRequest request, // 请求对象 boolean userGesture, // 是否用户手势触发 boolean isRedirect) { // 是否重定向 // 第1步:获取要访问的URL String url = request.getURL(); // url = "https://www.example.com" // 第2步:检查是否要阻止 if (url.contains("example.com") && !url.contains("api.example.com")) { // 步骤A:记录日志 log("⛔ 阻止访问网站: " + url); // 步骤B:弹出警告对话框 SwingUtilities.invokeLater(() -> { JOptionPane.showMessageDialog(null, "该网站已被阻止访问!\n" + url, "访问被阻止", JOptionPane.WARNING_MESSAGE); }); // 步骤C:返回true,阻止导航 return true; // true = 阻止! } // 第3步:允许其他网站 log("✅ 允许导航: " + url); return false; // false = 允许 }
详细解释每一步:
onBeforeBrowse() vs getResourceRequestHandler()
|
方法 |
拦截的是什么 |
什么时候调用 |
|
|
资源请求(图片、CSS、JS等) |
加载任何资源时 |
|
|
页面导航(跳转) |
页面要跳转时 |
形象理解:
-
getResourceRequestHandler()= 海关检查包裹 -
onBeforeBrowse()= 边检站检查护照
第1步:获取URL
String url = request.getURL();
-
获取要跳转的目标URL
-
此时
url = "https://www.example.com"
第2步:检查是否要阻止
if (url.contains("example.com") && !url.contains("api.example.com"))
这个条件有两部分:
部分1:url.contains("example.com")
url = "https://www.example.com" url.contains("example.com") // 检查URL是否包含 "example.com" // 结果:true(包含)
部分2:!url.contains("api.example.com")
url = "https://www.example.com" url.contains("api.example.com") // 检查是否包含 "api.example.com" // 结果:false(不包含) !url.contains("api.example.com") // 加上 ! 取反 // 结果:true(不包含api子域名)
为什么要排除 api.example.com:
-
阻止访问主站
www.example.com -
但允许API请求到
api.example.com -
这样可以精确控制
逻辑表:
|
URL |
包含example.com |
包含api.example.com |
最终结果 |
|
|
✅ true |
❌ false |
阻止 |
|
|
✅ true |
❌ false |
阻止 |
|
|
✅ true |
✅ true |
允许 |
|
|
❌ false |
❌ false |
允许 |
步骤A:记录日志
log("⛔ 阻止访问网站: " + url);
-
输出到控制台和日志窗口
-
显示:
[时间] ⛔ 阻止访问网站:https://www.example.com
步骤B:弹出警告对话框
SwingUtilities.invokeLater(() -> { JOptionPane.showMessageDialog( null, // 父窗口(null表示屏幕中央) "该网站已被阻止访问!\n" + url, // 消息内容 "访问被阻止", // 对话框标题 JOptionPane.WARNING_MESSAGE // 警告图标 ); });
SwingUtilities.invokeLater() 的作用:
-
确保对话框在UI线程中显示
-
避免线程安全问题
JOptionPane.showMessageDialog() 的参数:
-
null- 父窗口-
null= 对话框显示在屏幕中央 -
如果传入
frame,对话框会显示在窗口中央
-
-
消息内容:
"该网站已被阻止访问!\n" + url
-
\n是换行符 -
显示两行: 该网站已被阻止访问! https://www.example.com
-
对话框标题:
"访问被阻止" -
图标类型:
JOptionPane.WARNING_MESSAGE-
显示⚠️警告图标
-
步骤C:返回true阻止导航(最关键!)
return true; // true = 阻止导航
返回值的含义:
|
返回值 |
含义 |
结果 |
|
|
阻止导航 |
页面不跳转 |
|
|
允许导航 |
页面正常跳转 |
这是最关键的一行!
工作原理:
return true; // 告诉浏览器:停!不要跳转! // 浏览器接收到返回值 if (onBeforeBrowse返回true) { 取消导航(); // 停止跳转 } else { 继续导航(); // 正常跳转 }
第五步:浏览器停止跳转
浏览器内部处理:
-
浏览器:我准备跳转到 example.com
-
Java:onBeforeBrowse() 返回 true
-
浏览器:收到!取消导航
-
浏览器:保持在当前页面
结果:
-
✅ 对话框显示警告
-
✅ 日志记录阻止信息
-
✅ 页面不跳转,保持在原页面
-
✅ 地址栏不变
对比:如果允许跳转
第3步:允许其他网站
log("✅ 允许导航: " + url); return false; // false = 允许
如果访问的是百度:
url = "https://www.baidu.com" url.contains("example.com") // false // 条件不满足,跳过if块 log("✅ 允许导航: https://www.baidu.com"); return false; // 返回false,允许跳转
结果:
-
✅ 日志显示:`✅ 允许导航: https://www.baidu.com`
-
✅ 浏览器正常跳转到百度
-
✅ 地址栏显示百度URL
完整时间线:
|
时间 |
事件 |
代码位置 |
|
0ms |
用户点击按钮 |
HTML: |
|
1ms |
显示"正在尝试访问..." |
JS: |
|
500ms |
执行跳转命令 |
JS: |
|
501ms |
浏览器准备导航 |
浏览器内部 |
|
502ms |
Java拦截导航 |
Java: |
|
503ms |
检查URL |
Java: |
|
504ms |
记录日志 |
Java: |
|
505ms |
弹出对话框 |
Java: |
|
506ms |
返回true |
Java: |
|
507ms |
浏览器取消导航 |
浏览器内部 |
|
508ms |
保持在原页面 |
页面不变 |
控制台日志:
[时间] ⛔ 阻止访问网站: https://www.example.com
对应的Java代码:
log("⛔ 阻止访问网站: " + url);
图片拦截 vs 网站拦截对比
|
特性 |
图片拦截 |
网站拦截 |
|
使用的方法 |
|
|
|
拦截的对象 |
资源(图片、CSS、JS等) |
页面导航(跳转) |
|
阻止方式 |
|
|
|
返回值类型 |
|
|
|
什么时候调用 |
加载任何资源时 |
页面要跳转时 |
|
日志标识 |
🚫 |
⛔ |
实际应用场景
1、企业内网限制
if (!url.contains("company.com")) { // 只允许访问公司域名 return true; // 阻止外部网站 }
2、家长控制
String[] blockedSites = {"pornhub.com", "xvideos.com"}; for (String site : blockedSites) { if (url.contains(site)) { JOptionPane.showMessageDialog(null, "该网站不适合儿童!"); return true; // 阻止 } }
3、白名单模式
String[] whitelist = {"google.com", "wikipedia.org", "github.com"}; boolean allowed = false; for (String site : whitelist) { if (url.contains(site)) { allowed = true; break; } } if (!allowed) { return true; // 只允许白名单网站 }
4、工作时间限制
int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY); if (hour >= 9 && hour < 17) { // 工作时间 9-17点 if (url.contains("youtube.com") || url.contains("bilibili.com")) { JOptionPane.showMessageDialog(null, "工作时间禁止看视频!"); return true; // 阻止视频网站 } }
测试验证:
-
点击"访问 example.com"
-
看到阻止效果
-
-
点击顶部"🌐 访问百度"
-
看到允许跳转
-
-
观察日志区别:
-
阻止:
⛔ 阻止访问网站: ... -
允许:
✅ 允许导航: ...
-
总结
网站拦截的核心:
-
使用
onBeforeBrowse()方法 -
检查目标URL
-
返回
true阻止,返回false允许 -
可以弹出对话框提示用户
核心代码:
if (url.contains("blocked-site.com")) { return true; // 阻止! } return false; // 允许
-
修改请求头
操作一下:
-
"3️⃣ 测试请求头修改" 区域
-
点击绿色按钮:"访问百度(查看日志)"
会看到:
-
页面跳转到百度
-
控制台日志显示:
-
✅ 允许导航: https://www.baidu.com -
📡 [GET] https://www.baidu.com/ -
🔧 添加自定义请求头 -
很多其他百度资源的请求,每个都有
🔧 添加自定义请求头
-
完整流程图
用户点击按钮 → JavaScript跳转 → 浏览器发起请求 → Java拦截请求 → 检查URL → 修改请求头 → 浏览器用新请求头发送
第一步:用户点击"访问百度"按钮
<button onclick="loadBaidu()">访问百度(查看日志)</button>
发生了什么:
-
用户点击按钮
-
调用JavaScript函数
loadBaidu()
第二步:JavaScript准备跳转
function loadBaidu() { // 第1步:显示提示信息 document.getElementById('result').innerHTML = '⏳ 正在访问百度(查看下方日志可以看到添加的请求头)...'; // 第2步:延迟500毫秒后跳转 setTimeout(() => { window.location.href = 'https://www.baidu.com'; }, 500); }
和"网站拦截"类似:
-
显示提示
-
延迟后跳转到百度
第三步:Java允许导航
先经过 onBeforeBrowse()
@Override public boolean onBeforeBrowse(CefBrowser browser, CefFrame frame, CefRequest request, boolean userGesture, boolean isRedirect) { String url = request.getURL(); // url = "https://www.baidu.com" // 检查:百度不包含 "example.com" if (url.contains("example.com") && !url.contains("api.example.com")) { // 条件不满足,跳过 } // 允许访问百度 log("✅ 允许导航: " + url); return false; // false = 允许跳转 } ``` **日志输出**: ``` [时间] ✅ 允许导航: https://www.baidu.com
第四步:浏览器开始加载百度
浏览器接收到允许信号:
-
onBeforeBrowse()返回false -
浏览器:好的,我可以跳转
-
开始加载
https://www.baidu.com
第五步:Java拦截资源请求(关键!)
进入 getResourceRequestHandler()
@Override public CefResourceRequestHandler getResourceRequestHandler( CefBrowser browser, CefFrame frame, CefRequest request, boolean isNavigation, boolean isDownload, String requestInitiator, BoolRef disableDefaultHandling) { // 第1步:获取请求信息 String url = request.getURL(); String method = request.getMethod(); // 第2步:记录所有请求 log("📡 [" + method + "] " + url); // 第3步:检查是否需要修改请求头 if (url.contains("baidu.com") || url.contains("api")) { // 步骤A:创建一个Map来存放请求头 Map<String, String> headerMap = new HashMap<>(); // 步骤B:获取现有的请求头 request.getHeaderMap(headerMap); // 步骤C:添加自定义请求头 headerMap.put("X-Custom-Header", "From-Java-JCEF"); headerMap.put("X-My-Token", "my-secret-token-12345"); // 步骤D:将修改后的请求头设置回去 request.setHeaderMap(headerMap); // 步骤E:记录日志 log("🔧 添加自定义请求头"); } return null; // 使用默认处理 }
详细解释每一步:
1.获取请求信息
String url = request.getURL(); // url = "https://www.baidu.com/" String method = request.getMethod(); // method = "GET"
2.记录请求
log("📡 [" + method + "] " + url); ``` **输出**: ``` [时间] 📡 [GET] https://www.baidu.com/
3.检查URL
if (url.contains("baidu.com") || url.contains("api"))
条件有两部分:
部分1:url.contains("baidu.com")
url = "https://www.baidu.com/" url.contains("baidu.com") // 检查是否包含 "baidu.com" // 结果:true(包含)
部分2:url.contains("api")
// 如果URL包含 "api",也会修改请求头 // 例如:https://api.example.com/data
为什么这样设计:
-
给百度的所有请求添加自定义头
-
给任何API请求添加自定义头(通常API需要Token)
步骤A:创建HashMap存放请求头
Map<String, String> headerMap = new HashMap<>(); ``` **`Map` 是什么**: - 键值对集合 - Key(键):请求头名称,例如 `"User-Agent"` - Value(值):请求头的值,例如 `"Mozilla/5.0..."` **形象理解**: ``` Map就像一个字典: "User-Agent" → "Mozilla/5.0 Chrome/122.0..." "Accept" → "text/html,application/json" "Cookie" → "session_id=abc123" "Authorization" → "Bearer token123"
步骤B:获取现有请求头
request.getHeaderMap(headerMap);
这行代码做了什么:
-
把当前请求的所有请求头复制到
headerMap中 -
headerMap现在包含浏览器原本要发送的所有请求头
示例 - 获取前后对比:
// 获取前 headerMap = {} // 空的 // 执行 request.getHeaderMap(headerMap) // 获取后 headerMap = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...", "Accept": "text/html,application/xhtml+xml,application/xml", "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", "Accept-Encoding": "gzip, deflate, br", "Connection": "keep-alive", "Upgrade-Insecure-Requests": "1" }
为什么要先获取:
-
不能丢弃原有的请求头
-
只是在原有基础上添加新的
-
如果不获取直接设置,会清空所有原有请求头
步骤C:添加自定义请求头
headerMap.put("X-Custom-Header", "From-Java-JCEF"); headerMap.put("X-My-Token", "my-secret-token-12345");
Map.put(key, value) 的作用:
-
添加或更新键值对
-
如果key不存在,添加新的
-
如果key已存在,更新value
示例:
// 原有的请求头 headerMap = { "User-Agent": "Mozilla/5.0...", "Accept": "text/html..." } // 执行 put 操作 headerMap.put("X-Custom-Header", "From-Java-JCEF"); headerMap.put("X-My-Token", "my-secret-token-12345"); // 修改后的请求头 headerMap = { "User-Agent": "Mozilla/5.0...", "Accept": "text/html...", "X-Custom-Header": "From-Java-JCEF", // ← 新增 "X-My-Token": "my-secret-token-12345" // ← 新增 }
请求头命名规范:
-
自定义请求头通常以
X-开头 -
X-Custom-Header= 自定义头 -
X-My-Token= 我的令牌
步骤D:将修改后的请求头设置回去
request.setHeaderMap(headerMap); ``` **这行代码做了什么**: - 把修改后的 `headerMap` 设置回请求对象 - 浏览器会用这些新的请求头发送请求 **完整流程**: ``` 1. request.getHeaderMap(headerMap) ← 获取原有请求头 ↓ 2. headerMap.put("X-Custom", "Value") ← 添加自定义请求头 ↓ 3. request.setHeaderMap(headerMap) ← 设置回去 ↓ 4. 浏览器用新的请求头发送请求
步骤E:记录日志
log("🔧 添加自定义请求头"); ``` **输出**: ``` [时间] 🔧 添加自定义请求头
第六步:浏览器发送修改后的请求
浏览器发送的HTTP请求:
修改前(原始请求):
GET / HTTP/1.1 Host: www.baidu.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Accept: text/html,application/xhtml+xml,application/xml Accept-Language: zh-CN,zh;q=0.9 Connection: keep-alive
修改后(Java添加了请求头):
GET / HTTP/1.1 Host: www.baidu.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Accept: text/html,application/xhtml+xml,application/xml Accept-Language: zh-CN,zh;q=0.9 Connection: keep-alive X-Custom-Header: From-Java-JCEF ← Java添加的 X-My-Token: my-secret-token-12345 ← Java添加的 ``` **百度服务器收到的就是这些请求头!** --- ## 第七步:百度的资源也会被修改 当百度页面加载时,会请求很多资源: ``` https://www.baidu.com/ ← 主页 https://www.baidu.com/img/logo.png ← Logo图片 https://www.baidu.com/static/js/app.js ← JavaScript文件 https://www.baidu.com/static/css/main.css ← CSS文件
每个请求都会经过 getResourceRequestHandler():
// 第1个请求 url = "https://www.baidu.com/" url.contains("baidu.com") // true → 添加请求头 → log("🔧 添加自定义请求头") // 第2个请求 url = "https://www.baidu.com/img/logo.png" url.contains("baidu.com") // true → 添加请求头 → log("🔧 添加自定义请求头") // 第3个请求 url = "https://www.baidu.com/static/js/app.js" url.contains("baidu.com") // true → 添加请求头 → log("🔧 添加自定义请求头")
所以会在日志里看到很多:
[时间] 📡 [GET] https://www.baidu.com/ [时间] 🔧 添加自定义请求头 [时间] 📡 [GET] https://www.baidu.com/img/logo.png [时间] 🔧 添加自定义请求头 [时间] 📡 [GET] https://www.baidu.com/static/js/app.js [时间] 🔧 添加自定义请求头
完整时间线:
|
时间 |
事件 |
代码位置 |
|
0ms |
用户点击按钮 |
HTML: `οnclick="loadBaidu()"` |
|
1ms |
显示提示 |
JS: `innerHTML = '⏳...'` |
|
500ms |
跳转命令 |
JS: `window.location.href = ...` |
|
501ms |
Java允许导航 |
Java: `onBeforeBrowse()` 返回 `false` |
|
502ms |
浏览器开始加载 |
浏览器内部 |
|
503ms |
请求主页 |
`GET https://www.baidu.com/` |
|
504ms |
Java拦截请求 |
Java: `getResourceRequestHandler()` |
|
505ms |
检查URL |
Java: `if (url.contains("baidu.com"))` |
|
506ms |
获取原有请求头 |
Java: `request.getHeaderMap(headerMap)` |
|
507ms |
添加自定义请求头 |
Java: `headerMap.put(...)` |
|
508ms |
设置回请求 |
Java: `request.setHeaderMap(headerMap)` |
|
509ms |
记录日志 |
Java: `log("🔧 添加...")` |
|
510ms |
浏览器发送请求 |
带着新请求头 |
|
600ms |
百度响应 |
返回HTML |
|
601ms |
请求图片/CSS/JS |
每个都重复上面的流程 |
控制台日志:
[时间] 📡 [GET] https://www.baidu.com/ [时间] 🔧 添加自定义请求头
对应的Java代码:
log("📡 [" + method + "] " + url); // 检查并修改 if (url.contains("baidu.com") || url.contains("api")) { Map<String, String> headerMap = new HashMap<>(); request.getHeaderMap(headerMap); headerMap.put("X-Custom-Header", "From-Java-JCEF"); headerMap.put("X-My-Token", "my-secret-token-12345"); request.setHeaderMap(headerMap); log("🔧 添加自定义请求头"); }
实际应用场景
-
API身份验证
if (url.contains("api.myapp.com")) { Map<String, String> headerMap = new HashMap<>(); request.getHeaderMap(headerMap); // 从某处获取Token String token = getAuthToken(); headerMap.put("Authorization", "Bearer " + token); request.setHeaderMap(headerMap); }
-
统一添加追踪ID
if (url.contains("mycompany.com")) { Map<String, String> headerMap = new HashMap<>(); request.getHeaderMap(headerMap); // 生成唯一的请求ID String requestId = UUID.randomUUID().toString(); headerMap.put("X-Request-ID", requestId); headerMap.put("X-User-ID", getCurrentUserId()); request.setHeaderMap(headerMap); }
-
伪装User-Agent
Map<String, String> headerMap = new HashMap<>(); request.getHeaderMap(headerMap); // 修改User-Agent,伪装成移动设备 headerMap.put("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X)"); request.setHeaderMap(headerMap);
-
添加API密钥
if (url.contains("openai.com/api")) { Map<String, String> headerMap = new HashMap<>(); request.getHeaderMap(headerMap); headerMap.put("Authorization", "Bearer sk-xxxxx"); headerMap.put("Content-Type", "application/json"); request.setHeaderMap(headerMap); }
调试技巧:查看实际发送的请求头
修改代码,打印出所有请求头:
if (url.contains("baidu.com") || url.contains("api")) { Map<String, String> headerMap = new HashMap<>(); request.getHeaderMap(headerMap); // 打印修改前的请求头 System.out.println("=== 修改前 ==="); for (Map.Entry<String, String> entry : headerMap.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } // 添加自定义请求头 headerMap.put("X-Custom-Header", "From-Java-JCEF"); headerMap.put("X-My-Token", "my-secret-token-12345"); request.setHeaderMap(headerMap); // 打印修改后的请求头 System.out.println("=== 修改后 ==="); for (Map.Entry<String, String> entry : headerMap.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } log("🔧 添加自定义请求头"); }
日志:
[03:09:08] ✅ 允许导航: https://www.baidu.com/
[03:09:08] 📡 [GET] https://www.baidu.com/
=== 修改前 ===
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
X-Custom-Header: From-Java-JCEF
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:08] 🔧 添加自定义请求头
[03:09:08] 📡 [GET] https://pss.bdstatic.com/r/www/static/font/cosmic/pc/cos-icon_20cec29.css
[03:09:08] 📡 [GET] https://pss.bdstatic.com/static/superman/img/topnav/newfanyi-da0cea8f7e.png
[03:09:08] 📡 [GET] https://pss.bdstatic.com/static/superman/img/topnav/newxueshuicon-a5314d5c83.png
[03:09:08] 📡 [GET] https://pss.bdstatic.com/static/superman/img/topnav/newbaike-889054f349.png
[03:09:08] 📡 [GET] https://pss.bdstatic.com/static/superman/img/topnav/newzhidao-da1cf444b0.png
[03:09:08] 📡 [GET] https://pss.bdstatic.com/static/superman/img/topnav/newjiankang-f03b804b4b.png
[03:09:08] 📡 [GET] https://pss.bdstatic.com/static/superman/js/lib/jquery-1-edb203c114.10.2.js
[03:09:08] 📡 [GET] https://pss.bdstatic.com/static/superman/js/lib/esl-cf7161da9a.js
[03:09:08] 📡 [GET] https://pss.bdstatic.com/r/www/cache/static/protocol/https/bundles/es6-polyfill_388d059.js
[03:09:08] 📡 [GET] https://pss.bdstatic.com/r/www/cache/static/protocol/https/bundles/polyfill_9354efa.js
[03:09:08] 📡 [GET] https://pss.bdstatic.com/r/www/cache/static/protocol/https/global/js/all_async_search_7e9f559.js
[03:09:08] 📡 [GET] https://pss.bdstatic.com/static/superman/js/sbase-cf781c97b7.js
[03:09:08] 📡 [GET] https://pss.bdstatic.com/static/superman/css/ubase_sync-d600f57804.css?v=md5
[03:09:08] 📡 [GET] https://pss.bdstatic.com/static/superman/js/s_super_index-895c0c52f8.js
[03:09:08] 📡 [GET] https://pss.bdstatic.com/static/superman/js/min_super-7b1d78110b.js
[03:09:08] 📡 [GET] https://pss.bdstatic.com/static/superman/js/components/hotsearch-4bcd986297.js
[03:09:08] 📡 [GET] https://pss.bdstatic.com/static/superman/img/topnav/yingxiaoicon-612169cc36.png
[03:09:08] 📡 [GET] https://pss.bdstatic.com/static/superman/img/topnav/newzhibo-a6a0831ecd.png
[03:09:08] 📡 [GET] https://pss.bdstatic.com/static/superman/img/topnav/newyinyue-03ecd1e9b9.png
[03:09:08] 📡 [GET] https://pss.bdstatic.com/static/superman/img/topnav/chengpian-9981cd1fdb.png
[03:09:08] 📡 [GET] https://search-operate.cdn.bcebos.com/523ec78096010ec2eeff619c8b19c0b1.gif
[03:09:08] 📡 [GET] https://www.baidu.com/img/flexible/logo/pc/result.png
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:08] 🔧 添加自定义请求头
[03:09:08] 📡 [GET] https://www.baidu.com/img/flexible/logo/pc/result@2.png
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:08] 🔧 添加自定义请求头
[03:09:08] 📡 [GET] https://www.baidu.com/img/flexible/logo/pc/peak-result.png
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:08] 🔧 添加自定义请求头
[03:09:08] 📡 [GET] https://psstatic.cdn.bcebos.com/basics/aichat/wenwenxin_127_1769511848000.png
[03:09:08] 📡 [GET] https://gips1.baidu.com/it/u=2064921624,4034487978&fm=3028&app=3028&f=PNG&fmt=auto&q=100&size=f48_48
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:08] 🔧 添加自定义请求头
[03:09:08] 📡 [GET] https://gips0.baidu.com/it/u=4281402270,3169997192&fm=3028&app=3028&f=PNG&fmt=auto&q=100&size=f54_54
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:08] 🔧 添加自定义请求头
[03:09:08] 📡 [GET] https://gips0.baidu.com/it/u=2472953233,2504508960&fm=3028&app=3028&f=PNG&fmt=auto&q=100&size=f45_45
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:08] 🔧 添加自定义请求头
[03:09:08] 📡 [GET] https://gips2.baidu.com/it/u=491597113,3916662600&fm=3028&app=3028&f=PNG&fmt=auto&q=100&size=f48_41
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:08] 🔧 添加自定义请求头
[03:09:08] 📡 [GET] https://psstatic.cdn.bcebos.com/aife/static/more-menu_1756807326000.svg
[03:09:08] 📡 [GET] https://gips1.baidu.com/it/u=1620446295,3278148087&fm=3028&app=3028&f=PNG&fmt=auto&q=100&size=f48_48
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:08] 🔧 添加自定义请求头
[03:09:08] 📡 [GET] https://gips3.baidu.com/it/u=2788914033,4165369518&fm=3028&app=3028&f=PNG&fmt=auto&q=100&size=f48_48
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:08] 🔧 添加自定义请求头
[03:09:08] 📡 [GET] https://gips2.baidu.com/it/u=824246517,1077261156&fm=3028&app=3028&f=PNG&fmt=auto&q=100&size=f48_48
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:08] 🔧 添加自定义请求头
[03:09:08] 📡 [GET] https://gips1.baidu.com/it/u=3018263539,2901263415&fm=3028&app=3028&f=PNG&fmt=auto&q=100&size=f48_48
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:08] 🔧 添加自定义请求头
[03:09:08] 📡 [GET] https://gips0.baidu.com/it/u=97697174,2756139632&fm=3028&app=3028&f=PNG&fmt=auto&q=100&size=f48_48
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:08] 🔧 添加自定义请求头
[03:09:08] 📡 [GET] https://psstatic.cdn.bcebos.com/basics/aichat/hot_search_x3_1747880381000.png
[03:09:08] 📡 [GET] https://psstatic.cdn.bcebos.com/basics/aichat/to-up-newer_1766568454000.svg
[03:09:08] 📡 [GET] https://psstatic.cdn.bcebos.com/basics/aichat/to-up-active_1764583314000.svg
[03:09:08] 📡 [GET] https://pss.bdstatic.com/static/superman/img/qrcode/qrcode@2x-daf987ad02.png
[03:09:08] 📡 [GET] https://pss.bdstatic.com/static/superman/img/qrcode/qrcode-hover@2x-f9b106a848.png
[03:09:08] 📡 [GET] https://hectorstatic.baidu.com/cd37ed75a9387c5b.js
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:08] 🔧 添加自定义请求头
[03:09:08] 📡 [GET] https://pss.bdstatic.com/static/superman/amd_modules/tslib-c95383af0c.js
[03:09:08] 📡 [GET] https://pss.bdstatic.com/r/www/cache/static/protocol/https/plugins/every_cookie_4644b13.js
[0212/030909.020:INFO:CONSOLE(2017)] "无畏是青春的态度,热AI是时代的脉搏。
各位新同学正以无畏的姿态奔赴通用人工智能的星辰大海!
作为引领AI时代浪潮的主力军,广阔舞台,待你大展身手。
乘风破浪,勇往直前,未来百度将与你一起,创造无限可能!
", source: https://pss.bdstatic.com/r/www/cache/static/protocol/https/global/js/all_async_search_7e9f559.js (2017)
[0212/030909.021:INFO:CONSOLE(2017)] "%c百度2026校园招聘简历投递:https://talent.baidu.com/jobs/list color:red", source: https://pss.bdstatic.com/r/www/cache/static/protocol/https/global/js/all_async_search_7e9f559.js (2017)
[03:09:09] 📡 [GET] https://pss.bdstatic.com/r/www/cache/static/protocol/https/plugins/bzPopper_d8249c4.js
[03:09:09] 📡 [GET] https://pss.bdstatic.com/r/www/cache/static/protocol/https/home/js/nu_instant_search_8ceda8d.js
[03:09:09] 📡 [GET] https://pss.bdstatic.com/r/www/cache/static/protocol/https/plugins/swfobject_0178953.js
[03:09:09] 📡 [GET] https://pss.bdstatic.com/r/www/cache/static/protocol/https/soutu/js/tu_15b7782.js
[03:09:09] 📡 [GET] https://pss.bdstatic.com/static/superman-san/app/festival-animation/result_40f23fa.js
[03:09:09] 📡 [GET] https://pss.bdstatic.com/static/superman-san/app/chat-input/result_bc1e18d.js
[03:09:09] 📡 [POST] https://mbd.baidu.com/ztbox?action=zpblog&appname=pcsearch&sid=63146_67153_67220_67294_67319_67316_67314_67323_67320_67369_67441_67478_67501_67556_67542_67601_67619_67597_67641_67651_67704_67718_67746_67754_67313_67738_67811_67822_67824_67826_67828_67833&v=2.0&data=%7B%22cateid%22%3A%2299%22%2C%22actiondata%22%3A%7B%22id%22%3A18463%2C%22type%22%3A%220%22%2C%22timestamp%22%3A1770836949055%2C%22content%22%3A%7B%22page%22%3A%22home%22%2C%22source%22%3A%22%22%2C%22from%22%3A%22search%22%2C%22type%22%3A%22display%22%2C%22value%22%3A%22%22%2C%22ext%22%3A%7B%22status%22%3A%22default%22%2C%22is_log%22%3A%220%22%2C%22have_hotsearch%22%3A%221%22%2C%22is_kuang_rec_disp%22%3A%221%22%2C%22search_kuang_status%22%3A%22default%22%2C%22aisou_btn%22%3A%220%22%2C%22kuang_rec_status%22%3A%221%22%7D%7D%7D%7D
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:09] 🔧 添加自定义请求头
[03:09:09] 📡 [GET] https://sp1.baidu.com/-L-Xsjip0QIZ8tyhnq/v.gif?logactid=1234567890&showTab=10000&opType=showpv&mod=superman%3Alib&submod=index&superver=supernewplus&glogid=2148541745&type=2011&pid=315&isLogin=0&version=PCHome&terminal=PC&qid=0xb6e1b6d700102531&sid=63146_67153_67220_67294_67319_67316_67314_67323_67320_67369_67441_67478_67501_67556_67542_67601_67619_67597_67641_67651_67704_67718_67746_67754_67313_67738_67811_67822_67824_67826_67828_67833&super_frm=&from_login=&from_reg=&query=&curcard=2&curcardtab=&_r=0.8842954009451696
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:09] 🔧 添加自定义请求头
[03:09:09] 📡 [GET] https://sp1.baidu.com/-L-Xsjip0QIZ8tyhnq/v.gif?logactid=1234567890&showTab=10000&opType=nodepv&mod=superman%3Alib&submod=index&superver=supernewplus&glogid=2148541745&type=2011&pid=315&isLogin=0&version=PCHome&terminal=PC&qid=0xb6e1b6d700102531&sid=63146_67153_67220_67294_67319_67316_67314_67323_67320_67369_67441_67478_67501_67556_67542_67601_67619_67597_67641_67651_67704_67718_67746_67754_67313_67738_67811_67822_67824_67826_67828_67833&super_frm=&from_login=&from_reg=&query=&curcard=2&curcardtab=&_r=0.4620553910873857
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:09] 🔧 添加自定义请求头
[03:09:09] 📡 [GET] https://sp2.baidu.com/-L-Ysjip0QIZ8tyhnq/v.gif?mod=superman%3Acomponents&submod=hotsearch&utype=undefined&superver=supernewplus&portrait=undefined&logPortrait=undefined&glogid=2148541745&type=2011&pid=315&isLogin=0&version=PCHome&terminal=PC&qid=0xb6e1b6d700102531&sid=63146_67153_67220_67294_67319_67316_67314_67323_67320_67369_67441_67478_67501_67556_67542_67601_67619_67597_67641_67651_67704_67718_67746_67754_67313_67738_67811_67822_67824_67826_67828_67833&super_frm=&from_login=&from_reg=&query=&curcard=2&curcardtab=&_r=0.09217017571341612&m=superman%3Acomponents_hotsearchShow&showType=hotword&words=%5B%22%E4%B9%A0%E8%BF%91%E5%B9%B3%E6%98%A5%E8%8A%82%E5%89%8D%E5%A4%95%E6%85%B0%E9%97%AE%E9%83%A8%E9%98%9F%22%2C%22%E6%AF%94%E5%B0%94%C2%B7%E7%9B%96%E8%8C%A8%E5%86%8D%E5%BA%A6%E8%AE%BF%E5%8D%8E%E5%B9%B6%E6%BC%94%E8%AE%B2%22%2C%22%E5%A5%B3%E5%AD%90%E9%AA%91%E7%94%B5%E5%8A%A8%E8%BD%A6%E8%BF%912%E4%B8%AA%E6%9C%88%E4%BB%8E%E4%B8%8A%E6%B5%B7%E5%9B%9E%E5%B9%BF%E8%A5%BF%22%2C%22%E5%A4%AB%E5%A6%BB8%E5%B9%B4%E8%BF%98%E6%B8%85%E7%99%BE%E4%B8%87%E5%80%BA%E5%8A%A1%E9%A6%96%E6%AC%A1%E5%9B%9E%E5%AE%B6%E8%BF%87%E5%B9%B4%22%2C%22%E6%89%8B%E6%9C%BA%E5%87%BA%E7%8E%B0%E8%BF%99%E4%BA%9B%E9%97%AE%E9%A2%98%E5%8F%AF%E8%83%BD%E6%98%AF%E8%A2%AB%E6%8E%A7%E5%B1%8F%E4%BA%86%22%2C%22%E5%A5%B3%E7%94%9F%E5%B8%A6%E5%9B%9E%E5%AE%B6%E7%9A%84%E7%94%B7%E5%8F%8B%E6%98%AF%E5%A0%82%E5%BC%9F%E5%88%9D%E4%B8%AD%E5%90%8C%E5%AD%A6%22%2C%22%E5%A4%96%E5%9B%BD%E4%BA%BA%E4%B9%9F%E8%B5%B6%E6%98%A5%E8%BF%90%20ChinaTravel%E8%AF%B4%E8%B5%B0%E5%B0%B1%E8%B5%B0%22%2C%22%E7%88%B1%E6%B3%BC%E6%96%AF%E5%9D%A6%E6%AD%BB%E5%90%8E%E7%9B%91%E7%8B%B1%E7%94%A8%E5%81%87%E5%B0%B8%E9%AA%97%E8%BF%87%E8%AE%B0%E8%80%85%22%2C%22%E7%BD%95%E8%A7%81%EF%BC%81%E5%B2%9B%E5%86%85%E5%A4%9A%E5%85%9A%E6%B4%BE%E4%BA%BA%E5%A3%AB%E5%A3%B0%E6%8F%B4%E9%AB%98%E9%87%91%E7%B4%A0%E6%A2%85%22%2C%22%E8%AE%A9%E5%A4%96%E5%9C%B0%E4%BA%BA%E6%B2%89%E9%BB%98%E7%9A%84%E6%8A%98%E8%80%B3%E6%A0%B9%E5%87%BA%E5%9B%BD%E4%BA%86%22%5D&pagenum=0
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:09] 🔧 添加自定义请求头
[03:09:09] 📡 [GET] https://pss.bdstatic.com/static/superman/font/iconfont-fa013548a9.woff2
[03:09:09] 📡 [GET] https://pss.bdstatic.com/r/www/cache/static/protocol/https/amd_modules/@baidu/guarantee-popper_784e0ad.js
[03:09:09] 📡 [GET] https://pss.bdstatic.com/static/superman/font/iconfont-fa013548a9.woff2
[03:09:09] 📡 [GET] https://hector.baidu.com/a.js
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:09] 🔧 添加自定义请求头
[03:09:09] 📡 [GET] https://pss.bdstatic.com/static/superman/js/components/placeholder-ef1014c7fe.js
[03:09:09] 📡 [GET] https://pss.bdstatic.com/r/www/cache/static/protocol/https/soutu/css/soutu_new2_baa2298.css
[03:09:09] 📡 [POST] https://mbd.baidu.com/ztbox?action=zpblog&appname=pcsearch&sid=63146_67153_67220_67294_67319_67316_67314_67323_67320_67369_67441_67478_67501_67556_67542_67601_67619_67597_67641_67651_67704_67718_67746_67754_67313_67738_67811_67822_67824_67826_67828_67833&v=2.0&data=%7B%22cateid%22%3A%2299%22%2C%22actiondata%22%3A%7B%22id%22%3A18463%2C%22type%22%3A%220%22%2C%22timestamp%22%3A1770836949209%2C%22content%22%3A%7B%22page%22%3A%22home%22%2C%22source%22%3A%22%22%2C%22from%22%3A%22search%22%2C%22type%22%3A%22show%22%2C%22value%22%3A%22home_operate%22%2C%22ext%22%3A%7B%22status%22%3A%22default%22%2C%22is_log%22%3A%220%22%2C%22function_type%22%3A%22ai_search%22%2C%22area%22%3A%22base%22%2C%22pos%22%3A1%2C%22content%22%3A%22%E5%A4%8D%E6%9D%82%E9%97%AE%E9%A2%98%E5%B0%B1%E6%89%BE%E6%96%87%E5%BF%83%E5%8A%A9%E6%89%8B%20%F0%9F%91%89%22%2C%22function_list%22%3A%5B%22%E5%A4%8D%E6%9D%82%E9%97%AE%E9%A2%98%E5%B0%B1%E6%89%BE%E6%96%87%E5%BF%83%E5%8A%A9%E6%89%8B%20%F0%9F%91%89%22%5D%7D%7D%7D%7D
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:09] 🔧 添加自定义请求头
[03:09:09] 📡 [POST] https://mbd.baidu.com/ztbox?action=zpblog&appname=pcsearch&sid=63146_67153_67220_67294_67319_67316_67314_67323_67320_67369_67441_67478_67501_67556_67542_67601_67619_67597_67641_67651_67704_67718_67746_67754_67313_67738_67811_67822_67824_67826_67828_67833&v=2.0&data=%7B%22cateid%22%3A%2299%22%2C%22actiondata%22%3A%7B%22id%22%3A18463%2C%22type%22%3A%220%22%2C%22timestamp%22%3A1770836949209%2C%22content%22%3A%7B%22page%22%3A%22home%22%2C%22source%22%3A%22%22%2C%22from%22%3A%22search%22%2C%22type%22%3A%22show%22%2C%22value%22%3A%22capsule_bub%22%2C%22ext%22%3A%7B%22status%22%3A%22default%22%2C%22is_log%22%3A%220%22%2C%22function_type%22%3A%22photo_editing%22%2C%22area%22%3A%22base%22%2C%22pos%22%3A2%2C%22content%22%3A%22AI%E7%94%9F%E5%9B%BE%22%2C%22function_list%22%3A%5B%22AI%E7%94%9F%E5%9B%BE%22%5D%7D%7D%7D%7D
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:09] 🔧 添加自定义请求头
[03:09:09] 📡 [POST] https://mbd.baidu.com/ztbox?action=zpblog&appname=pcsearch&sid=63146_67153_67220_67294_67319_67316_67314_67323_67320_67369_67441_67478_67501_67556_67542_67601_67619_67597_67641_67651_67704_67718_67746_67754_67313_67738_67811_67822_67824_67826_67828_67833&v=2.0&data=%7B%22cateid%22%3A%2299%22%2C%22actiondata%22%3A%7B%22id%22%3A18463%2C%22type%22%3A%220%22%2C%22timestamp%22%3A1770836949209%2C%22content%22%3A%7B%22page%22%3A%22home%22%2C%22source%22%3A%22%22%2C%22from%22%3A%22search%22%2C%22type%22%3A%22show%22%2C%22value%22%3A%22capsule_bub%22%2C%22ext%22%3A%7B%22status%22%3A%22default%22%2C%22is_log%22%3A%220%22%2C%22function_type%22%3A%22office_create%22%2C%22area%22%3A%22base%22%2C%22pos%22%3A3%2C%22content%22%3A%22AI%E5%86%99%E4%BD%9C%22%2C%22function_list%22%3A%5B%22AI%E5%86%99%E4%BD%9C%22%5D%7D%7D%7D%7D
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:09] 🔧 添加自定义请求头
[03:09:09] 📡 [POST] https://mbd.baidu.com/ztbox?action=zpblog&appname=pcsearch&sid=63146_67153_67220_67294_67319_67316_67314_67323_67320_67369_67441_67478_67501_67556_67542_67601_67619_67597_67641_67651_67704_67718_67746_67754_67313_67738_67811_67822_67824_67826_67828_67833&v=2.0&data=%7B%22cateid%22%3A%2299%22%2C%22actiondata%22%3A%7B%22id%22%3A18463%2C%22type%22%3A%220%22%2C%22timestamp%22%3A1770836949210%2C%22content%22%3A%7B%22page%22%3A%22home%22%2C%22source%22%3A%22%22%2C%22from%22%3A%22search%22%2C%22type%22%3A%22show%22%2C%22value%22%3A%22capsule_bub%22%2C%22ext%22%3A%7B%22status%22%3A%22default%22%2C%22is_log%22%3A%220%22%2C%22function_type%22%3A%22ai_translate%22%2C%22area%22%3A%22base%22%2C%22pos%22%3A4%2C%22content%22%3A%22AI%E7%BF%BB%E8%AF%91%22%2C%22function_list%22%3A%5B%22AI%E7%BF%BB%E8%AF%91%22%5D%7D%7D%7D%7D
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:09] 🔧 添加自定义请求头
[03:09:09] 📡 [POST] https://mbd.baidu.com/ztbox?action=zpblog&appname=pcsearch&sid=63146_67153_67220_67294_67319_67316_67314_67323_67320_67369_67441_67478_67501_67556_67542_67601_67619_67597_67641_67651_67704_67718_67746_67754_67313_67738_67811_67822_67824_67826_67828_67833&v=2.0&data=%7B%22cateid%22%3A%2299%22%2C%22actiondata%22%3A%7B%22id%22%3A18463%2C%22type%22%3A%220%22%2C%22timestamp%22%3A1770836949210%2C%22content%22%3A%7B%22page%22%3A%22home%22%2C%22source%22%3A%22%22%2C%22from%22%3A%22search%22%2C%22type%22%3A%22show%22%2C%22value%22%3A%22capsule_bub%22%2C%22ext%22%3A%7B%22status%22%3A%22default%22%2C%22is_log%22%3A%220%22%2C%22function_type%22%3A%22ai_code%22%2C%22area%22%3A%22base%22%2C%22pos%22%3A5%2C%22content%22%3A%22AI%E7%BC%96%E7%A8%8B%22%2C%22function_list%22%3A%5B%22AI%E7%BC%96%E7%A8%8B%22%5D%7D%7D%7D%7D
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:09] 🔧 添加自定义请求头
[03:09:09] 📡 [POST] https://mbd.baidu.com/ztbox?action=zpblog&appname=pcsearch&sid=63146_67153_67220_67294_67319_67316_67314_67323_67320_67369_67441_67478_67501_67556_67542_67601_67619_67597_67641_67651_67704_67718_67746_67754_67313_67738_67811_67822_67824_67826_67828_67833&v=2.0&data=%7B%22cateid%22%3A%2299%22%2C%22actiondata%22%3A%7B%22id%22%3A18463%2C%22type%22%3A%220%22%2C%22timestamp%22%3A1770836949220%2C%22content%22%3A%7B%22page%22%3A%22home%22%2C%22source%22%3A%22%22%2C%22from%22%3A%22search%22%2C%22type%22%3A%22show%22%2C%22value%22%3A%22deepsearch_btn%22%2C%22ext%22%3A%7B%22status%22%3A%22default%22%2C%22is_log%22%3A%220%22%2C%22function_type%22%3A%22%22%2C%22aisou_text%22%3A%22%E9%97%AEAI%22%7D%7D%7D%7D
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:09] 🔧 添加自定义请求头
[03:09:09] 📡 [GET] https://gips2.baidu.com/it/u=1627277417,3307578141&fm=3028&app=3028&f=PNG&fmt=auto&q=100&size=f526_253
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:09] 🔧 添加自定义请求头
[03:09:09] 📡 [GET] https://www.baidu.com/sugrec?&prod=pc_his&from=pc_web&json=1&imod=2&sid=63146_67153_67220_67294_67319_67316_67314_67323_67320_67369_67441_67478_67501_67556_67542_67601_67619_67597_67641_67651_67704_67718_67746_67754_67313_67738_67811_67822_67824_67826_67828_67833&hisdata=%5B%5D&_t=1770836949225&req=2&usegosug=1&csor=0
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: application/json, text/javascript, */*; q=0.01
Ps-Dataurlconfigqid: 0xb6e1b6d700102531
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: application/json, text/javascript, */*; q=0.01
Ps-Dataurlconfigqid: 0xb6e1b6d700102531
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:09] 🔧 添加自定义请求头
[03:09:09] 📡 [GET] https://gips0.baidu.com/it/u=14154217,3818936281&fm=3028&app=3028&f=PNG&fmt=auto&q=100&size=f384_384
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:09] 🔧 添加自定义请求头
[03:09:09] 📡 [GET] https://psstatic.cdn.bcebos.com/basics/chat/afx%202_1750155358000.mp4
[03:09:09] 📡 [POST] https://mbd.baidu.com/ztbox?action=zpblog&appname=pcsearch&sid=63146_67153_67220_67294_67319_67316_67314_67323_67320_67369_67441_67478_67501_67556_67542_67601_67619_67597_67641_67651_67704_67718_67746_67754_67313_67738_67811_67822_67824_67826_67828_67833&v=2.0&data=%7B%22cateid%22%3A%2299%22%2C%22actiondata%22%3A%7B%22id%22%3A18463%2C%22type%22%3A%220%22%2C%22timestamp%22%3A1770836949259%2C%22content%22%3A%7B%22page%22%3A%22home%22%2C%22source%22%3A%22%22%2C%22from%22%3A%22search%22%2C%22type%22%3A%22show%22%2C%22value%22%3A%22kuang_rec%22%2C%22ext%22%3A%7B%22status%22%3A%22default%22%2C%22is_log%22%3A%220%22%2C%22query%22%3A%22%E5%A5%B3%E5%AD%90%E7%BE%8E%E7%9D%AB%E5%90%8E%E7%9D%AB%E6%AF%9B%E4%B8%8A%E9%95%BF%E6%BB%A1%E8%9E%A8%E8%99%AB%22%2C%22str_sa%22%3A%22iph_igh_notyyc_gsnd%22%7D%7D%7D%7D
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:09] 🔧 添加自定义请求头
[03:09:09] 📡 [GET] https://psstatic.cdn.bcebos.com/basics/chat/afx%202_1750155358000.mp4
[03:09:09] 📡 [GET] https://psstatic.cdn.bcebos.com/basics/chat/afx%202_1750155358000.mp4
[03:09:09] 📡 [GET] https://pss.bdstatic.com/static/superman/js/components/tips-e2ceadd14d.js
[03:09:09] 📡 [GET] https://pss.bdstatic.com/static/superman/js/super_load-0d7fab1791.js
[03:09:09] 📡 [GET] https://pss.bdstatic.com/static/superman/js/components/qrcode-9bba34e3d7.js
[03:09:09] 📡 [GET] https://pss.bdstatic.com/static/superman/js/components/advert-374dc154df.js
[03:09:09] 📡 [GET] https://pss.bdstatic.com/static/superman/js/components/login_guide-4fba3971ce.js
[03:09:09] 📡 [GET] https://pss.bdstatic.com/static/superman/js/components/video-meet-7833028d86.js
[03:09:09] 📡 [GET] https://pss.bdstatic.com/static/superman/js/components/content-info-12dbf9fb6d.js
[03:09:09] 📡 [GET] https://pss.bdstatic.com/static/superman/js/components/csaitab-log-a9c9cae804.js
[03:09:09] 📡 [GET] https://pss.bdstatic.com/static/superman/js/components/top-right-operate/operate-b7693b0cc7.js
[03:09:09] 📡 [GET] https://pss.bdstatic.com/static/superman/js/components/aging-tools-d6d9fc5dee.js
[03:09:09] 📡 [GET] https://pss.bdstatic.com/static/superman/js/components/invoke-97e9694cb9.js
[03:09:09] 📡 [GET] https://pss.bdstatic.com/static/superman/js/components/new-search-guide-bub-a65115eb7c.js
[03:09:09] 📡 [GET] https://hectorstatic.baidu.com/96c9c06653ba892e.js
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:09] 🔧 添加自定义请求头
[03:09:09] 📡 [GET] https://pss.bdstatic.com/static/superman/amd_modules/@baidu/video-meeting-1be7f62dac.js
[03:09:09] 📡 [GET] https://pss.bdstatic.com/static/superman/js/components/guide_tips-d9e617f782.js
[03:09:09] 📡 [GET] https://passport.baidu.com/passApi/js/wrapper.js?cdnversion=1770836949495&_=1770836948889
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:09] 🔧 添加自定义请求头
[03:09:09] 📡 [POST] https://mbd.baidu.com/ztbox?action=zpblog&appname=pcsearch&sid=63146_67153_67220_67294_67319_67316_67314_67323_67320_67369_67441_67478_67501_67556_67542_67601_67619_67597_67641_67651_67704_67718_67746_67754_67313_67738_67811_67822_67824_67826_67828_67833&v=2.0&data=%7B%22cateid%22%3A%2299%22%2C%22actiondata%22%3A%7B%22id%22%3A18463%2C%22type%22%3A%220%22%2C%22timestamp%22%3A1770836949501%2C%22content%22%3A%7B%22page%22%3A%22home%22%2C%22source%22%3A%22%22%2C%22from%22%3A%22search%22%2C%22type%22%3A%22show%22%2C%22value%22%3A%22csaitab%22%7D%7D%7D
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: */*
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:09] 🔧 添加自定义请求头
[03:09:09] 📡 [GET] https://pss.bdstatic.com/static/superman/js/ubase-dddde7cd4e.js?v=md5
[03:09:09] 📡 [GET] https://pss.bdstatic.com/r/www/cache/static/protocol/https/amd_modules/@baidu/aging-tools-pc_63487d8.js
[03:09:09] 📡 [GET] https://hector.baidu.com/static/h.gif?d=3c4e75773d6c6e646a53592637607219200d76773c66233f6a1d70712a7561141315727b202a2d312107666121646034054e2e3c206d726021066c572d6e76112009203271646e702905517036736517224e2e3c3c6663762e067061217377152b09616a7124237c260b676236736119291c776a7124237c260b67623673611d26181a767124237c260b676236736104280b6572362a2d312707616b3775611e331a6b6d3a6a687f211d7b652c756b03330d767b3060607d2f0c20287b6e6a132802767b2b7c6d7c3b1d20287b6e6a132802767b2b7c73763b1d6d763c65265c65036c6d366b7461211d7b74366d6d133e1a6b713f69757a270720287b6e6a032b03767d3b696f742d4b2e26366f741f2e02767b217a60643d1966652d64265c65036c6a21696f60211d6b6b3773711e654020713d7c7372261a6b70306e6a03330d706a7124237c261d706537726d042e036c7d32666276244b2e263a736b033423707734616f5a3b066e652d6460526b4e717d3b6d6566240c70267523621929082032717a6463271b76412b736b026540206d277a74703c1c70613d42681f29092032716b6961270467267523671f28076b7b007c6e612d4b2e263560711e2404536b367d6431644b65612d52670222096c5a367c607a241a20287b6e74152928636a326a60602d4b2e26287461023e206d7d3264477c261d712675237718281b4677216d6267271b7b5430626f15354e2e3c20606e640719676a1f68681517056175367a233f6a1a6a6b2e526506222a6b7236586870230c702675236b022e0b6b70126f647d3c2a6e712a7561026540207d216d6576261d6b65356d6103344e2e3c3c6672703a066e683c6f60526b4e757b316368671a0c73713c7270362e00674d2a7b7576254b2e262e64661b2e18507b20676d652d256d67386d42192b095167207c647e1d3b4e2675236c526b4e5d73326642723a0d20287b5e7700180d71673d6b233f6a0b66777b2d262f2400636d204b607f242a6a613a6a265c6533667b35616f76181b6d743c737019221f2032715762612d0876611a6d6503344e2e3c0c6c6475210767542b6e741535187b3c7f2a5e60381051613765265c6533716e2a5b647d2c2c70763673265c650e6d7a2a2a2d312608746d3e6070156540207f3f5760613a4b2e262a646816081c67707124237a3b204726752341526b4e607a067b64616a4520663d50711535152032716a65463b0c44652f6e265c650e6658327e6e5c264b2e263b654719234e2e3c316c527a2c4b2e263b655715351a676c07616c766a4520663d506d146540207c377b757c230c6c267523681f20056c41207d62702d1a71267523772f23036f7f3a66233f6a1a5d773c7277192802203271575e7a260076403875652f184e2e3c0c5760603107615b2a75761133096567712423376a45206e087461023e4e2e3c376d677a260c20287b7361013205707b712423763b0520287b6877382e18517f3e786d7a260e20287b6877332b03717b1b676c76181b6760306270526b4e41713c6368766a4520510952265c65335d6c367b75723a1d5d67366f621935015d6a3a65647c3d1d20287b5e5b132802647721655e672104676b2c75265c65335d7a3a7b6071240c5d6d2a5e63052e08673c7f2a5e4c2c0071653b6d612f341b636e0c7c6e4c2d04727020232852183371693a7c627b17086660066c65032c4e2e3c0c57646b3c0c6c602a2328521833636d2061667d6a45205b06736103334e2e3c0c5765762b0670652d64265c65335d6e327a607e6a45205b066c61042608636a322a2d311736637338687015354e2e3c0c576676260c70652d6e76526b4e5d413670717c3a1d51703873265c65335d68326474763b4b2e26065e76152608203271575e60381b67653d2328521833716e216d6077091b70652072265c65335d7f246968676a45205b06607709290f457b3d6d73723c06702675235b2f261f7b70304c647f2d0e63703673265c65335d7f20716f701e086e713c72265c65335d73326364472d0472683875613f2506677d272a2d3117366b69296e76041418636c7124234c17006f7436737034220a636b3f7c233f6a365d6735607703171e6b68327c6455210c6e601e6470526b4e5d41306460603b39706d2f60701501056772375b64676a45205b066276152618675c3a66657a260e20287b6b5505221e7b2f623833237a513b336e313642745a3a26603b332b7b4b2e2638656035114e2e3c0c694c506a452065355e67526b4e63720c6b3331644b612675235011203d2032714f233f6a07715b3a5e741a6540207020576231644b666b34606d1e6540207b206b60632d215649152328522e026b6a037a647f27086626752377153304644e3c7b233f6a1c71612b5e67526b4e6b703a7c51723b1a54377b2d2619341c5d763a626070234b2e263e6470162209667c326b6a57291d6326752362152208607f30635276240c61703673265c650a677b376a60702320616b3752611c220f7671212a2d31211a60652a643244654020410c6b607f240b6367325e6a112a09713c7f2a68766a45206d3c37265c651970727124236023006c403c676102654020783c7a6c723c2d63703c232852250d717b1060607d2f0c5776352328522b0d6c791060607d2f0c5776352328522608745d3b696f742d3c70687b2d26162e00675d3b696f742d3c70687b2d260132097067016d717f290a672675236108332f6a7f3d6f64463a0520287b6d651e200a6b72276d7347211920287b756d1d220a6b72276d7347211920287b676d1c22387b6e365c68636a45206d37726d14223f677f216b6947211920287b40265c65056c77275a64603d0576473568671b0b03653c7f2a67726a45205b306f721f2c095d723c6f687d6a4520662b6e7303221e2032716a737c3f1a67762f6476032e036c3c7f2a6361271e71612b757d00224e2e3c3c7b233f6a007153306f52193418633c7f2a6e603e0c7077306e6a526b4e524c1657425c062720287b6270072e0220327161627c2c0c76612a75265c650f6d6c362a2d313d0b61267523662f3509613c7f2a72703a3670613a23285235096a41216d6231644b6a652a69265c651f676a007d66582d1020287b6661040419706d3c7a7543271a6b70306e6a526b4e6176326666761d1b6e26752374112009516a327c6431644b52401a5e45231e22413c7f2a677c3a045d772c636919334e2e3c3a66657630366e6d376a77526b4e6b70376d794c270720287b686a1422145d71356e233f6a246d683c62711c223f676c256162766a4520427b2d26242f196c7a367a233f6a046d683c5261023105617b7124234c3004636a067274152208203271616c74040665572b62265c651c636c32657231644b71763a2328522e0165523c6f233f6a1e67663b33265c65056f793f67664c17583533693937467e583b2e663e233f6a006f63356e632f185d352963303225715d3b346c36265c65056f793f67664c17583533693937467e583b2e6539233f6a1d676929456504264e2e3c276760603c4b2e267d636b143e4e2e3c0c646e722c367170387571036540206d366665462a0a4e6b3e2328522e01654d266f5276260d20287b6f6b312e3f7779006d6f776a4520772c664c19342f6e7730635276260d20287b7271170f05714d3b6776402d0766267523651900196b7a365b697c3f3a676a3d23285234096c7a1a78755f270e20287b6661041619676c2a5b75612107652675236718220f6956207d665a264b2e263a6961132c24716b345b697c3f4b2e26106c6124350d6175712423423d00616f1d646815330920327157316b7a5d3b317b2d262f7714307d356e233f6a36767d29646b166540204a1645515c1a28505d7b2d2620023e5157005c445d1c4b5f287b6f65062e0b636a3c7a2329334b746137656b021419603c692a233f6a19706b3d7467041419603c692a3323785a32356936265c651a677037677331724b456b3666681567256c7d7d2a2d3125087a503674671817036b70277b23296a5920287b726718220877723a666631724b596b3b6b6113334c517d3b6d656624006c6304232852321f676c126b757a3e08766d366f264a65376d7c396d6267683c71612b4067042e1a636a3a676f4e6a452060364f6b04131e637d382a3b7d3d056e287b66611f2b03617f27616e7d6a53205f36636e152418225936676d7c2b08766d366f59526b4e61713d6664703c006d6a7b3b262b280e687b307c215d2d1d756b2b6a4d1e21037073327c687c263420287b71680520056c6d71325a316a4520267523265c654e2e3c71242331644b20287b2328526540203c7f2a233f6a4b2e267b2d26526b4e2032712a2d316a4520267523265c654e5f327165687e2d3d7b743c72264a65376d7c396d626768246b693c557d00222d706c32715c31644b72603f576d153009705b3d69637f2d0d203e7b757605224e2e3c246d6378211d566134716b02261e7b4d276773722f0c203e7b5a6b122d09616a734c64633a0c61652d6460233303707f346d5066271d63597b2d2607220e6977275864613b0071703c6f70233303707f346d23296a326d66336467046728676e216d62723c0c66572d6e76112009536b3c7c604e6a45206c38736007261e675d3c6662663a1b676a3a78264a655e323c7f2a627c27026b611c6f65122b09663c692a75613d0c20287b6074000403667b1d696c766a532049367b6d1c2b0d20327169716306086f617b3b263e2218717d32786431644b63742957610234056d70713223266659222c0e686a14281b713e1d5c21227847323f79566d1e7158393e2b3e353a682872743564531525276b6a7c3d3224665a3424714a4c240a202e3e3f616a76682e6767326e2d50040470713e6d2e227a5b2c3477312a40673f6378327a683c7d5a352a6a37265c651c6e7f276e6e61254b38260e686a43754e2e3c237a6e773d0a76266323431524076d3c7f2a74602d1b43633c6f70527d4e4f7129616d7f2946372a69212c272e026671247b215d1c49333477313f5010056c286733216b7e5d2b241871741c223b677c1861753c7d5a352a6a3724580c2456531f24217f210267241e64671b2845225d3b7a6e7e2d4633366b2f345e7742323e006967723a002d316a362a43714e2e3c3f696f743d0865617b3b26152941574d7124237f29076571386661036556207b3d255440640c6c2675236b1e0b056c7b713223673a1c67267523731525087077256d7331724b6465357261526b4e657b274f607e2d1963602a233e5221196c7d27616e7d680e67701e606915370d666d7b21216868326c652d687215670f6d7a3655216e6a45206e38776535290d6072366c23296a0f776a3a756d1f294c687f2569447d290b6e613d292d503c4c5970327c68652d49616b3d6459503a4e2e3c206d6f770a0c6367366f264a650a7770307c687c2649716137654615260f6d707b21216868326c652d687215670f6d7a3655216e6a4520723063761133092024716e747d2b1d6b6b37217219251e636a362028333349596a38756d06224c6171376d5c33354b2e263b6d711533036d6a3b2a3b311306606e3c6270500500777b27676e67203420287b72701f350d657b117d62782d1d712663235f1f2506677d27285267271b63633c4371132c097653326660742d1b5f267523671c2e1c6071327a6531724b596b3b6b6113334c41723a78637c291b66597b2d26133509667b3d7c6872241a203e7b5a6b122d09616a734b73762c0c6c703060680304036c6a32616f763a3420287b6a61092503636c372a3b311306606e3c6270500c097b7c3c697377154b2e2634606a112009663c692a5a7c2a0367672d214a1131051e7f2767735e290763633c654011330d5f3c7f2a6c762c0063403c776d13221f202471536e71220c6170794c61142e0d467b256162763b3420287b72701f350d657b71322348270b68613a7524233303707f346d4c72260865612b5c265c651f676c256162761f06706f3c73264a65376d7c396d6267683a67762f68671510037075367a427c261d636d3764762d654020683a7a75662905496120636b113508202471536e71220c617079576d0233196372186d78712708706004232852300d697b1f6762786a53205f36636e15241822493263645f270a69597b2d2614221a6b7d3645647e271b7b2663233c526b4e776d367a40742d077640387565527d4e5971316264703c494c652f6863113303704b124c6067293420287b6d6b172e02202471536e71220c6170794f65062e0b636a3c7a4d7c2f006c597b2d26192907202471536e71220c617079486a1b1a4e2e3c3e6d657a292a637438636d1c2e186b7b202a3b311306606e3c6270500a096677324b6063290b6b6830756d1534312032716068776a53205f36636e15241822561a4c5c31644b6e6b3a6a77527d4e5971316264703c494e6b3a6a4911290d657b2155233f6a0e72717b3b262b280e687b307c2154183c5f26752369152305634d367b727a2707203e7b5a6b122d09616a73456477210851612a726d1f293120327178646125007177306e6a03655620453c6a6b762b1d22543c736919341f6b713d7b5c31644b72763c72611e330d76773c6623296a326d6633646704673c707b206d6f67291d6b6b375c265c6519717c71322348270b68613a752425142e5f3c7f2a79616a53205f36636e1524182246015b78603c0c6f597b2d2603221e6b7f3f2a3b311306606e3c6270501409707732645c31644b756d37656b0704036c6a21676d60071f677635607d527d4e5971316264703c49556d37656b0704036c6a21676d60071f677635607d2d6540207d3f6d60610919724638656315655620782666626721066c243a6d6111352d726e116965742d412b2422215f1e26186b683628627c2c0c5f24242328522009765c327c75763a10203e7b67711e24186b713d2866763c2b63702d6476096f45226573536f723c00746179626b1422312263712423742d1d57773c7349152305633c692a6766260a766d366f24172218576d367a4c762c00632c70217f501c02636a3a7e64332b066661042179526b4e707b227d64603c244b4010406713221f713c692a6766260a766d366f2402221d777b207c4c5a0c2043673a6477036f45226573536f723c00746179626b1422312263712423612d1877612a754915230563553671526a3b1d676918626715341f2024716e747d2b1d6b6b372176153619676d274564772108496120527d0333096f5f306b64603b412b2422215f1e26186b683628627c2c0c5f24242328523409765f237843722c0e672663236205290f76773c6621602d1d43742943651420092a37737321482608766d2f642413280867437375233f6a1e6766326870372218576d367a4c762c00632663236205290f76773c6621642d0b696d2d466104121f676c1e6d657a29412b2422215f1e26186b683628627c2c0c5f2424232852200976573d7b7572240567600b6468113309665f23787231724b64713762701928022279367c487d3b1d6368356460222200636a366c4063381a2a2d797a242b290d7677256d2170270d6759797c265c651e67793a7b75763a39706b2d6e671f2b246370376464616a5320622c6f67042e036c3e216d667a3b1d677609736b04280f6d721b696f77240c702c70217f501c02636a3a7e64332b066661042179526b4e7770216d667a3b1d677609736b04280f6d721b696f77240c702663236205290f76773c662166261b676330727015353c70712767627c2421636a3d6d61026f45226573536f723c00746179626b142231226371752d312d11767638233e0b6504707b352a3b31201d76742a3b2b5f301b7530316968773d47616b342e265c651e6778367a73763a4b38267b2d2618261f407b3b69777a271b203e3f60680322402076327b557c3d0a6a266367651c34092e3c30676c63291d4f6b3d64264a652f514d624b6e7e380876267523601f2a246b7a376d6f31720f63682a6428523709707871322323645b3528683134526b4e6671305b68692d4b382668323c446b593b267124237a3b206c4d3f73651d224e387832647276644b6b770a6069150f03716a713275613d0c2e2630725705371c6d6c274b607d3e0871266375760522402076327b40770a056d6732233e162600717b7f2a627c27026b611c6f65122b09663c697c73662d45207435746319291f20240873237d2904672663235434014c5477367f64616a4520603c7267022e1c76773c6623296a396d762d60661c224c4671307d6c76261d224236736911334e2e3c3e616c761c1072612a233e2b3c4e7667236d23296a0872743568671133056d707c7865756a4520772c6762193f09713c692a71772e4b7f282223700937092024717c646b3c4672603f232852341964783a7064606a5320743d67260d1a112e657166607e2d4b38261a69761f2a09224e174e2145210c75612b2328522309717d2161716721066c266323541f3518637c3f6d2157270a77693c6f705001037073327c233f6a046b693c557d00221f202408732367311967266323650037006b7d327c687c264672603f232852341964783a7064606a5320743d67260d6b17206a2a786431724b766121752b00230a2032717b74752e007a612a233e523708643c2e557c3f334b6c653464264a652f6a6c3c656866254952401f215219221b676c712423772d1a6176307170192802202471586e613c0860683c21401f24196f7b3d7c2155271b6f652d2328522a056f7b077171763b4b385f222370093709202471697163240061652d686b1e681c6678712423603d0f646d216477527d4e727a352a7c3f334b767d2964264a65186766272771772e4b2e262a7462162e14676d713223632c0f2079047c280b65026373362a3b310500617636726b16334c477a346d21430c2f225230647315354e2e3c376d72703a007270306e6a527d4e5271217c6071240c22403662711d2202763e1567737e291d20287b6c6d1d22387b6e367b232913122070207161527d4e636e23646870291d6b6b372e7414214e2e3c207d6775211167777b3b2600230a20637f73236731196726632370153f182d6e376e233f6a1a77623f687c15344e383c236c673135347f2822236a112a092024715f6471030076243b746d1c33416b70735845556a4520603c7267022e1c76773c6623296a396d762d60661c224c4671307d6c76261d224236736911334e2e3c3e616c761c1072612a233e2b3c4e7667236d23296a0872743568671133056d707c7865756a4520772c6762193f09713c692a71772e4b7f282223700937092024717c646b3c4672603f232852341964783a7064606a5320743d67260d1a115f3271616f772d1167601d43264a331e777b7f2a72763b1a6b6b3752701f350d657b713275613d0c2e26356e67112b3f7671216966766a5376762c64285233056f7b09676f76070f64773c75264a755c2e3c3f696f743d0865612a233e5222022f4b002a2d31200870602e60761504036c7d267a7376260a7b266333345c650163660767747020396d6d377577527d5c2e3c27677470202c74613775264a210d6e6d36242367271c616c0a756502334e387832647276644b75613b6668262202667b212a3b310f066d6335642439290f2c3e7b46575a0c20432d7b2d2607220e6572016d6f772d1b203e7b404a370b2922361d5e485701282e2417574d340e2d2259364e6e612b0c22560d592443775b323e0761215f2919766b29214320124c2a2e2b383123785b3641692824342e1e677d273b45227949747706345b40671c71416657313f682d314068302d526b4e7272327c677c3a04203e7b566d1e745e2032717b62612d0c6c57307b61527d4e302b65382d227c5d32286b3432406b5d362e632a2d312b066e6b2b45610033042024613c2d3138007a61355365042e0320246226343f6a0a6d68367343112a19763c692a72612f0b20287b626b1e331e636d275873762e0c7061376261527d5c2e3c356773702d0d416b356e76527d4e6c713d6d233f6a016676146e60156556206d27696f77291b66267523671f2b03706d1a6677763a1d67607b3b26526b4e617621676c761e0c7077306e6a527d4e332f623a3021795b33366b333641765e332f623a30227958333568303541765d332f623930227958333668303541765d332f623930227958333568303541765d2032716e7131724b63336c353747700f3a2a64306470700d37366c6537467e08602f313a37237e0b20287b677433281f764a3a656431725f32797523700937092024716962702d1a7126752374022808777d272a3b31380a5161387367181509716b3f7c236e&t=1770836949548
=== 修改前 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
=== 修改后 ===
sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"
X-Custom-Header: From-Java-JCEF
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept-Language: en-US,en;q=0.9
X-My-Token: my-secret-token-12345
[03:09:09] 🔧 添加自定义请求头
[03:09:09] 📡 [GET] https://pss.bdstatic.com/static/superman/css/ubase-89d6b96e41.css?v=md5
总结
请求头修改的核心步骤:
-
获取原有请求头 -
request.getHeaderMap(headerMap) -
添加或修改请求头 -
headerMap.put(key, value) -
设置回请求 -
request.setHeaderMap(headerMap) -
浏览器用新请求头发送
核心代码:
Map<String, String> headerMap = new HashMap<>(); request.getHeaderMap(headerMap); // 获取 headerMap.put("Authorization", "Bearer xxx"); // 添加 request.setHeaderMap(headerMap); // 设置
-
请求API
操作步骤:
-
"4️⃣ 测试API请求" 区域
-
点击按钮:"发送API请求"
会看到:
-
页面显示:"⚠️ API请求失败(正常现象)"
-
控制台日志:
[时间] 📡 [GET] https://api.example.com/data [时间] 🔧 添加自定义请求头
JavaScript代码:
function fetchAPI() { document.getElementById('result').innerHTML = '⏳ 发送API请求...'; // 使用fetch发送API请求 fetch('https://api.example.com/data') .then(response => { document.getElementById('result').innerHTML = '✅ API请求已发送(查看日志)'; }) .catch(error => { document.getElementById('result').innerHTML = '⚠️ API请求失败(正常现象,因为是演示URL)<br>已在日志中记录请求'; }); }
fetch() 是什么:
-
JavaScript的API请求函数
-
类似于
XMLHttpRequest -
用于发送HTTP请求
这个请求:
-
发送GET请求到
https://api.example.com/data -
这个URL是假的,所以会失败
-
但Java仍然会拦截到这个请求
Java处理(和第三个完全相同!):
进入 getResourceRequestHandler()
@Override public CefResourceRequestHandler getResourceRequestHandler(...) { String url = request.getURL(); // url = "https://api.example.com/data" String method = request.getMethod(); // method = "GET" // 记录请求 log("📡 [" + method + "] " + url); // 检查URL(注意这个条件) if (url.contains("baidu.com") || url.contains("api")) { // ↑ // 这里匹配 "api" Map<String, String> headerMap = new HashMap<>(); request.getHeaderMap(headerMap); // 添加Token(这对API很重要!) headerMap.put("X-Custom-Header", "From-Java-JCEF"); headerMap.put("X-My-Token", "my-secret-token-12345"); request.setHeaderMap(headerMap); log("🔧 添加自定义请求头"); } return null; }
条件判断:
if (url.contains("baidu.com") || url.contains("api"))
分析:
url = "https://api.example.com/data" url.contains("baidu.com") // false(不包含baidu.com) url.contains("api") // true(包含"api") // ^^^ // https://api.example.com/data // ^^^ // 找到了! // 整体结果:false || true = true // 条件满足,执行修改请求头
请求会失败原因很简单:
-
https://api.example.com/data这个URL是假的 -
真实世界里不存在这个API
-
浏览器发送请求,但服务器不存在或不响应
-
fetch()进入catch分支 -
显示"API请求失败"
但这不重要!重要的是:
-
✅ Java成功拦截了这个请求
-
✅ Java成功添加了自定义请求头
-
✅ 浏览器用新请求头发送了请求(虽然失败了)
和第三个"请求头修改"的相似之处:
|
对比项 |
第三个(访问百度) |
第四个(API请求) |
|
触发方式 |
|
|
|
目标URL |
|
|
|
匹配条件 |
|
|
|
Java方法 |
|
|
|
操作 |
添加请求头 |
添加请求头 |
|
核心代码 |
|
|
|
请求结果 |
成功(百度存在) |
失败(URL是假的) |
区别只有一个:
-
百度URL存在,请求成功
-
API URL不存在,请求失败
实际场景中的应用
第四个例子模拟的是真实的API身份验证场景:
场景1:调用公司内部API
if (url.contains("api.mycompany.com")) { Map<String, String> headerMap = new HashMap<>(); request.getHeaderMap(headerMap); // 添加公司内部的认证Token headerMap.put("Authorization", "Bearer " + getCompanyToken()); headerMap.put("X-User-ID", getCurrentUserId()); request.setHeaderMap(headerMap); }
场景2:调用第三方API(如OpenAI)
if (url.contains("api.openai.com")) { Map<String, String> headerMap = new HashMap<>(); request.getHeaderMap(headerMap); // 添加OpenAI的API密钥 headerMap.put("Authorization", "Bearer sk-xxxxxxxxxxxxxx"); headerMap.put("Content-Type", "application/json"); request.setHeaderMap(headerMap); }
场景3:统一添加认证信息
// 给所有包含"api"的请求添加Token if (url.contains("api") || url.contains("/v1/") || url.contains("/v2/")) { Map<String, String> headerMap = new HashMap<>(); request.getHeaderMap(headerMap); String token = TokenManager.getToken(); headerMap.put("Authorization", "Bearer " + token); request.setHeaderMap(headerMap); }
为什么要单独演示API请求?
虽然和第三个功能代码相同,但单独演示有这些目的:
1. 强调API场景的重要性
-
API请求几乎总是需要认证
-
Token、API Key是常见需求
-
这是实际工作中最常用的场景
2. 展示不同的触发方式
-
第三个:页面导航(
window.location.href) -
第四个:AJAX请求(
fetch()) -
两种方式都能被Java拦截
3. 演示失败也能拦截
-
即使API不存在
-
Java依然能拦截并修改请求头
-
证明拦截发生在发送请求之前
4. 更贴近实际应用
在真实项目中:
// 前端代码 fetch('https://api.example.com/user/info') .then(response => response.json()) .then(data => console.log(data)); // Java自动添加Token // 前端无需手动设置请求头 // 所有API请求都自动带上认证信息
实验:对比有无请求头的区别
修改代码测试:
测试1:去掉 "api" 条件
// 修改前 if (url.contains("baidu.com") || url.contains("api")) // 修改后(只匹配百度) if (url.contains("baidu.com"))
重新运行,点击"发送API请求":
-
日志会显示:
📡 [GET]https://api.example.com/data -
日志不会显示:
🔧 添加自定义请求头 -
证明:条件不匹配,没有修改请求头
测试2:添加调试输出
if (url.contains("baidu.com") || url.contains("api")) { Map<String, String> headerMap = new HashMap<>(); request.getHeaderMap(headerMap); // 打印修改前 System.out.println("=== API请求头(修改前)==="); headerMap.forEach((k, v) -> System.out.println(k + ": " + v)); headerMap.put("X-Custom-Header", "From-Java-JCEF"); headerMap.put("X-My-Token", "my-secret-token-12345"); request.setHeaderMap(headerMap); // 打印修改后 System.out.println("=== API请求头(修改后)==="); headerMap.forEach((k, v) -> System.out.println(k + ": " + v)); log("🔧 添加自定义请求头"); }
总结
第四个"测试API请求":
-
代码层面:和第三个完全相同,都是修改请求头
-
触发方式:不同(一个是页面跳转,一个是fetch)
-
实际意义:强调API认证场景的重要性
-
教学目的:展示同一个Java代码可以拦截不同类型的请求
核心逻辑:
if (url.contains("api")) { // 添加Token headerMap.put("Authorization", "Bearer xxx"); request.setHeaderMap(headerMap); }
本质上就是第三个功能的一个应用实例,只是用来强调API场景而已。
3️⃣ 核心概念讲解
1. CefRequestHandler - 请求处理器
这是拦截请求的入口:
client.addRequestHandler(new CefRequestHandlerAdapter() { // 在这里拦截和处理请求 });
2. getResourceRequestHandler() - 资源请求处理
每当浏览器要加载资源时都会调用:
@Override public CefResourceRequestHandler getResourceRequestHandler( CefBrowser browser, CefFrame frame, CefRequest request, // 包含URL、请求头等信息 boolean isNavigation, boolean isDownload, String requestInitiator, BoolRef disableDefaultHandling) { String url = request.getURL(); // 这里可以查看、修改、拦截请求 return null; // 返回null表示使用默认处理 }
快速记忆表
|
参数 |
简单理解 |
常用操作 |
|
|
哪个浏览器 |
|
|
|
主页面还是iframe |
|
|
|
请求详情(最重要) |
|
|
|
会不会跳转 |
判断是否页面跳转 |
|
|
是不是下载 |
判断是否下载文件 |
|
|
谁发起的 |
防止跨域攻击 |
|
|
要不要阻止 |
|
参数1:CefBrowser browser - 浏览器实例
是什么:发起请求的浏览器对象。
形象理解:就像你家的电脑,告诉你"是哪台电脑发出的请求"。
实际用途:
// 获取当前浏览器的URL String currentUrl = browser.getURL(); System.out.println("当前页面: " + currentUrl); // 在浏览器中执行JavaScript browser.executeJavaScript("alert('拦截到请求!')", currentUrl, 0); // 让浏览器后退 browser.goBack();
例子:
if (browser.getURL().contains("baidu.com")) { System.out.println("这个请求来自百度页面"); }
参数2:CefFrame frame - 框架(页面或iframe)
是什么:发起请求的页面框架。一个浏览器窗口可能有多个框架。 形象理解:
-
主框架 = 整个网页
-
子框架(iframe) = 网页里嵌入的小网页
┌─────────────────────────┐ │ 主框架 (Main Frame) │ │ ┌─────────────────┐ │ │ │ iframe 1 │ │ ← 子框架 │ └─────────────────┘ │ │ ┌─────────────────┐ │ │ │ iframe 2 │ │ ← 子框架 │ └─────────────────┘ │ └─────────────────────────┘
实际用途:
// 判断是否是主框架 if (frame.isMain()) { System.out.println("这是主页面发出的请求"); } else { System.out.println("这是iframe发出的请求"); } // 获取框架的URL String frameUrl = frame.getURL(); // 在特定框架中执行JavaScript frame.executeJavaScript("console.log('Hello')", frameUrl, 0);
例子:
// 只拦截主框架的请求,忽略iframe if (frame.isMain() && url.contains("blocked")) { disableDefaultHandling.set(true); }
参数3:CefRequest request - 请求对象(最重要!)
是什么:包含请求的所有详细信息。
包含的信息:
-
URL(要访问的地址)
-
请求方法(GET、POST等)
-
请求头(Headers)
-
POST数据
实际用途:
// 1. 获取URL String url = request.getURL(); System.out.println("请求的URL: " + url); // 2. 获取请求方法 String method = request.getMethod(); System.out.println("请求方法: " + method); // GET, POST, PUT, DELETE... // 3. 查看请求头 Map<String, String> headers = new HashMap<>(); request.getHeaderMap(headers); System.out.println("User-Agent: " + headers.get("User-Agent")); System.out.println("Cookie: " + headers.get("Cookie")); // 4. 修改请求头 headers.put("Authorization", "Bearer my-token"); headers.put("X-Custom", "My-Value"); request.setHeaderMap(headers); // 5. 获取POST数据 CefPostData postData = request.getPostData(); if (postData != null) { System.out.println("这是一个POST请求,有数据提交"); }
完整例子:
String url = request.getURL(); String method = request.getMethod(); System.out.println("=== 请求详情 ==="); System.out.println("URL: " + url); System.out.println("方法: " + method); // 查看所有请求头 Map<String, String> headers = new HashMap<>(); request.getHeaderMap(headers); for (Map.Entry<String, String> entry : headers.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); }
参数4:boolean isNavigation - 是否是页面导航
是什么:判断这个请求是否会导致页面跳转。
形象理解:
-
true= 你点击了链接,或在地址栏输入网址,页面要跳转了 -
false= 只是加载图片、CSS等资源,页面不跳转
例子:
if (isNavigation) { System.out.println("🚗 这是页面导航(要跳转了)"); System.out.println("从 " + browser.getURL() + " 跳转到 " + request.getURL()); } else { System.out.println("📦 这只是加载资源(图片、CSS等)"); }
实际应用:
// 只拦截页面导航,不拦截资源加载 if (isNavigation && url.contains("危险网站")) { return true; // 阻止跳转 }
参数5:boolean isDownload - 是否是下载
是什么:判断这个请求是否会触发文件下载。
形象理解:
-
true= 用户点击下载按钮,或者浏览器要下载文件了 -
false= 正常浏览,不是下载
例子:
if (isDownload) { System.out.println("💾 用户要下载文件: " + request.getURL()); // 可以阻止下载 if (url.endsWith(".exe")) { System.out.println("⛔ 阻止下载exe文件!"); return true; // 阻止 } } else { System.out.println("👀 正常浏览网页"); }
实际应用:
// 记录所有下载 if (isDownload) { String fileName = url.substring(url.lastIndexOf('/') + 1); logDownload(fileName, url); // 企业环境:阻止下载某些类型的文件 if (url.endsWith(".exe") || url.endsWith(".bat")) { JOptionPane.showMessageDialog(null, "禁止下载可执行文件!"); return true; } }
参数6:String requestInitiator - 请求发起者
是什么:告诉你这个请求是谁发起的(哪个域名/页面)。
形象理解:
-
就像查看"这个快递是从哪里寄出的"
-
可以是一个网站域名
例子:
System.out.println("请求发起者: " + requestInitiator); // 输出示例: // "https://www.baidu.com" ← 请求是百度页面发起的 // "https://www.example.com" ← 请求是example网站发起的 // null ← 用户直接在地址栏输入
实际应用:
// 防止跨域攻击 if (requestInitiator != null && !requestInitiator.contains("mycompany.com")) { if (url.contains("api.mycompany.com")) { System.out.println("⚠️ 警告:外部网站尝试访问我们的API!"); disableDefaultHandling.set(true); return null; // 阻止 } }
参数7:BoolRef disableDefaultHandling - 禁用默认处理(最关键!)
是什么:一个布尔值的引用,用来告诉浏览器"要不要用默认方式处理这个请求"。
形象理解:
-
这是一个"开关"
-
disableDefaultHandling.set(false)= 开关关闭 = 正常处理 -
disableDefaultHandling.set(true)= 开关打开 = 不要处理,阻止!
为什么要用 BoolRef 而不是 boolean:
// 错误写法(不起作用) boolean disable = true; // 这只是局部变量,不会影响浏览器 // 正确写法 disableDefaultHandling.set(true); // 这会真正通知浏览器
实际用途:
// 1. 阻止加载某个资源 if (url.contains("ad.jpg")) { System.out.println("🚫 阻止广告"); disableDefaultHandling.set(true); // 阻止! return null; } // 2. 阻止访问某个网站 if (url.contains("blocked-site.com")) { System.out.println("⛔ 阻止访问"); disableDefaultHandling.set(true); // 阻止! return null; } // 3. 正常处理(默认) // 不设置,或者设置为false disableDefaultHandling.set(false); // 正常加载 return null;
综合实战例子
@Override public CefResourceRequestHandler getResourceRequestHandler( CefBrowser browser, CefFrame frame, CefRequest request, boolean isNavigation, boolean isDownload, String requestInitiator, BoolRef disableDefaultHandling) { // 获取基本信息 String url = request.getURL(); String method = request.getMethod(); System.out.println("\n=== 拦截到请求 ==="); System.out.println("URL: " + url); System.out.println("方法: " + method); System.out.println("当前页面: " + browser.getURL()); System.out.println("是否主框架: " + frame.isMain()); System.out.println("是否导航: " + isNavigation); System.out.println("是否下载: " + isDownload); System.out.println("发起者: " + requestInitiator); // 场景1:阻止广告 if (url.contains("ads.") || url.contains("tracker.")) { System.out.println("🚫 阻止广告"); disableDefaultHandling.set(true); return null; } // 场景2:阻止下载可执行文件 if (isDownload && url.endsWith(".exe")) { System.out.println("⛔ 阻止下载exe文件"); disableDefaultHandling.set(true); JOptionPane.showMessageDialog(null, "禁止下载可执行文件!"); return null; } // 场景3:给API请求添加Token if (url.contains("/api/")) { System.out.println("🔧 添加认证Token"); Map<String, String> headers = new HashMap<>(); request.getHeaderMap(headers); headers.put("Authorization", "Bearer my-secret-token"); request.setHeaderMap(headers); } // 场景4:只允许主框架访问某些资源 if (!frame.isMain() && url.contains("secret-api")) { System.out.println("⚠️ iframe不允许访问此API"); disableDefaultHandling.set(true); return null; } // 场景5:防止跨域攻击 if (requestInitiator != null && !requestInitiator.contains("trusted.com") && url.contains("api.trusted.com")) { System.out.println("🛡️ 阻止非信任域名访问API"); disableDefaultHandling.set(true); return null; } // 默认:正常处理 return null; }
3. 自定义协议 myapp://(暂时删除)
为什么删除:需要实现复杂的接口方法,容易报错,对初学者不友好。
替代方案:用其他方式演示拦截功能(见下面)
4. 阻止特定请求(保留 + 增强)
if (url.contains("blocked.jpg")) { log("🚫 阻止加载: " + url); disableDefaultHandling.set(true); // 关键:设置为true阻止加载 return null; }
工作原理:
-
disableDefaultHandling.set(true)告诉浏览器"不要用默认方式加载这个资源" -
返回
null表示也不提供自定义内容 -
结果:资源加载失败
5. 修改请求头
if (url.contains("baidu.com")) { Map<String, String> headerMap = new HashMap<>(); request.getHeaderMap(headerMap); // 获取现有请求头 headerMap.put("X-Custom-Header", "From-Java-JCEF"); // 添加新请求头 headerMap.put("X-My-Token", "my-secret-token-12345"); request.setHeaderMap(headerMap); // 设置回去 log("🔧 添加自定义请求头"); }
实际用途:
-
添加身份验证Token
-
添加追踪ID
-
伪装User-Agent
-
添加API密钥
6. onBeforeBrowse() - 阻止页面导航
@Override public boolean onBeforeBrowse(CefBrowser browser, CefFrame frame, CefRequest request, boolean userGesture, boolean isRedirect) { String url = request.getURL(); if (url.contains("example.com")) { log("⛔ 阻止访问网站: " + url); // 弹出提示框 SwingUtilities.invokeLater(() -> { JOptionPane.showMessageDialog(null, "该网站已被阻止访问!\n" + url); }); return true; // true = 阻止导航 } return false; // false = 允许导航 }
区别理解:
|
方法 |
拦截的是什么 |
返回值含义 |
|
getResourceRequestHandler() |
资源请求(图片、CSS、JS等) |
返回处理器或null |
|
onBeforeBrowse() |
页面导航(点击链接、地址栏输入) |
true=阻止,false=允许 |
形象比喻:
-
getResourceRequestHandler()= 海关检查每个包裹 -
onBeforeBrowse()= 边境检查站拦截车辆
4️⃣ 运行和测试
测试1:图片拦截
操作:页面加载后,看到"❌ 图片被Java阻止加载"
日志显示:
[17:30:15] 📡 [GET] file:///C:/Users/.../request_test.html [17:30:15] 📡 [GET] file:///C:/Users/.../blocked.jpg [17:30:15] 🚫 阻止加载: file:///C:/Users/.../blocked.jpg
发生了什么:
-
浏览器尝试加载
blocked.jpg -
Java拦截到这个请求
-
检测到URL包含 "blocked.jpg"
-
设置
disableDefaultHandling.set(true) -
图片加载失败,显示错误文本
测试2:网站拦截
操作:点击"访问 example.com(会被阻止)"
看到的效果:
-
页面显示"正在尝试访问..."
-
弹出警告框:"该网站已被阻止访问!"
-
页面不会跳转
日志显示:
[17:30:20] ⛔ 阻止访问网站: https://www.example.com
发生了什么:
-
JavaScript 执行
window.location.href = 'https://www.example.com' -
Java 的
onBeforeBrowse()被调用 -
检测到URL包含 "example.com"
-
返回
true阻止导航 -
同时弹出提示框
测试3:请求头修改
操作:点击"访问百度(查看日志)"
日志显示:
[17:30:25] ✅ 允许导航: https://www.baidu.com [17:30:25] 📡 [GET] https://www.baidu.com/ [17:30:25] 🔧 添加自定义请求头 [17:30:25] 📡 [GET] https://www.baidu.com/img/logo.png [17:30:25] 🔧 添加自定义请求头
发生了什么:
-
允许导航到百度
-
浏览器开始加载百度的HTML
-
Java拦截到请求,检测URL包含 "baidu.com"
-
添加自定义请求头:
-
X-Custom-Header: From-Java-JCEF -
X-My-Token: my-secret-token-12345
-
-
浏览器用修改后的请求头发送请求
-
百度服务器收到这些额外的请求头
如何验证请求头真的被添加了:
你可以用浏览器开发者工具(F12)查看网络请求,但更简单的方法是看日志中的 🔧 添加自定义请求头。
测试4:API请求
操作:点击"发送API请求"
日志显示:
[17:30:30] 📡 [GET] https://api.example.com/data [17:30:30] 🔧 添加自定义请求头
发生了什么:
-
JavaScript 发送 fetch 请求
-
Java拦截到,检测URL包含 "api"
-
添加请求头(可能包含Token)
-
请求失败(因为是演示URL),但请求头已经被添加
实际应用场景
📊 场景1:企业内网应用
// 只允许访问公司域名 if (!url.contains("company.com")) { return true; // 阻止访问外部网站 }
🔐 场景2:统一身份认证
// 所有API请求自动添加Token if (url.contains("/api/")) { headerMap.put("Authorization", "Bearer " + getToken()); }
📱 场景3:广告拦截器
// 阻止广告域名 if (url.contains("ads.") || url.contains("tracker.")) { disableDefaultHandling.set(true); return null; }
🎓 场景4:家长控制
// 阻止不适合儿童的网站 if (isBlockedForKids(url)) { JOptionPane.showMessageDialog(null, "该网站不适合儿童访问!"); return true; }

1882

被折叠的 条评论
为什么被折叠?



