February 8, 2025

怎么在headless_chrome中添加拦截器

#拦截器 #headless_chrome #rust
目前在使用的比较多的的无头浏览器一般都是JS/TS的Puppteer或者Python的Selenium
当然我推荐Puppteer,因为这个库是Chromeium小组在维护的,今天我要带来的是Rust的headless_chrome库,我这几天因为工作原因一直在弄这个库,也翻阅了很多资料,之后我也打算去为这个开源项目贡献一些代码,好了回到正题,怎么在无头浏览器中添加拦截器?

什么是拦截器?

写过后端项目的程序员肯定是知道这个概念的,当然我们在这里重新解释一次更好
拦截器是一个中间件,它不改动原有代码,对于网络请求发送之前和网络响应接收之后进行拦截和处理。

拦截器特型

在Rust的headless_chrome库中的拦截器是RequestInterceptor这是一个特型,下面给出一个示例教你怎么使用它

pub struct OnGoodItemRequestInterceptor;

impl RequestInterceptor for OnGoodItemRequestInterceptor {
    fn intercept(
        &self,
        _transport: Arc<Transport>,
        _session_id: SessionId,
        event: RequestPausedEvent,
    ) -> RequestPausedDecision {
        match event.params {
            RequestPausedEventParams { .. } => {}
        }
        RequestPausedDecision::Continue(None)
    }
}

unsafe impl Send for OnGoodItemRequestInterceptor {}
unsafe impl Sync for OnGoodItemRequestInterceptor {}

这里实现了一个特型,event变量里面存放着发送或者响应的数据,返回的类型是RequestPausedDecision,后面我会对这个简单介绍一下

About this Post

This post is written by JinHong Zeng, licensed under CC BY-NC 4.0.

#Rust#Chrome#Web