【教程】browsermob-proxy 基于Java的代理服务 配合selenium使用

这篇具有很好参考价值的文章主要介绍了【教程】browsermob-proxy 基于Java的代理服务 配合selenium使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【教程】browsermob-proxy 基于Java的代理服务 配合selenium使用

配置依赖

        <!-- 代理 配合 selenium进行抓包修改等 -->
        <dependency>
            <groupId>net.lightbody.bmp</groupId>
            <artifactId>browsermob-core</artifactId>
            <version>2.1.5</version>
        </dependency>

安装证书

导入证书, 可以不导入

browsermob-proxy/ca-certificate-rsa.cer at master · lightbody/browsermob-proxy (github.com)

https://jsd.cdn.zzko.cn/gh/lightbody/browsermob-proxy@master/browsermob-core/src/main/resources/sslSupport/ca-certificate-rsa.cer

或者复制下边的内容 另存为 ca-certificate-rsa.cer

-----BEGIN CERTIFICATE-----
MIIDfzCCAmegAwIBAgIVAMFQpicWi3EjPX08LgeuA8nAOEfIMA0GCSqGSIb3DQEB
DQUAMEYxGTAXBgNVBAMMEExpdHRsZVByb3h5IE1JVE0xKTAnBgNVBAoMIExpdHRs
ZVByb3h5IFJTQSBJbXBlcnNvbmF0aW9uIENBMB4XDTE1MDEwMjAwMDAwMFoXDTI1
MDEwMjAwMDAwMFowRjEZMBcGA1UEAwwQTGl0dGxlUHJveHkgTUlUTTEpMCcGA1UE
CgwgTGl0dGxlUHJveHkgUlNBIEltcGVyc29uYXRpb24gQ0EwggEiMA0GCSqGSIb3
DQEBAQUAA4IBDwAwggEKAoIBAQC141M+lc046DJaNqIARozRPROGt/s5Ng1UOE84
tKhd+M/REaOeNovW+42uMa4ZifJAK7Csc0dx54Iq35LXy0tMw6ly/MB0pFi+aFCJ
VzXZhbAWIsUmjU8t6z2Y0sjKVX/g3HkdXqaX94jlDtsTjeQXvFhiJNRlX/Locc/f
/oNYZWhg7IPGyQglRY9Dco9kZMSbh5y0yfM8002PNPbNOP4dMX4yYqovT90XbvQ2
rCBbiS6Cys7j44vwOcra9srlb3YQiOCOsYCf7eIhT1GH8tqQ84CHblufqxcGIvXv
V1ex6bDFy63tiPySsOwuVnZglkQ0MDl1GMKVySdPw/qQM5v9AgMBAAGjZDBiMB0G
A1UdDgQWBBRFMQtpkCyZIK9NxaEJDvbfaV1QOzAPBgNVHRMBAf8EBTADAQH/MAsG
A1UdDwQEAwIBtjAjBgNVHSUEHDAaBggrBgEFBQcDAQYIKwYBBQUHAwIGBFUdJQAw
DQYJKoZIhvcNAQENBQADggEBAJuYv1NuxPHom579iAjs19YrFGewHpv4aZC7aWTt
oC1y9418w7QzVOAz2VzluURazUdg/HS9s8abJ8IS0iD0xLz0B1cvJ6F2BezjAwyG
2LxZggmBdLqwjdRkX0Mx3a2HqUpEqaNeKyE8VmzwPuDHN1AqbFcuOPHN7fm7kAtL
4bxFmjgSt7PjEdYwysdjkLC6m+236tuFydpVkXMjuBthsk/hZ1Y/3tbCj/B9a9//
5O+HhYEy+Oa64iFvxfgDfKKUQR3VmwThj1Dh2iJw/kbPJEuQ/PtfcnQhOqyliwg6
Edxd1kaO4HU8Am6TwpmpPFWHRqhM2xj2PAGyfFtN1WfBEQ4=
-----END CERTIFICATE-----

【教程】browsermob-proxy 基于Java的代理服务 配合selenium使用

 【教程】browsermob-proxy 基于Java的代理服务 配合selenium使用

 【教程】browsermob-proxy 基于Java的代理服务 配合selenium使用

 【教程】browsermob-proxy 基于Java的代理服务 配合selenium使用

配合selenium 使用

配置依赖


        <!-- 控制Chrome浏览器 -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>${selenium.version}</version>
        </dependency>

        <!-- 代理 配合 selenium进行抓包修改等 -->
        <dependency>
            <groupId>net.lightbody.bmp</groupId>
            <artifactId>browsermob-core</artifactId>
            <version>2.1.5</version>
        </dependency>
        

        <!-- 工具类 -->
        <dependency>
            <groupId>io.github.tanyaofei</groupId>
            <artifactId>guava</artifactId>
            <version>${guava.version}</version>
        </dependency>

相关代码片段

可以修改请求参数 请求头  以及 响应结果等, 灵活性比较强


        /**
         * 配置代理
         * 
         */

        BrowserMobProxy browserMobProxy = new BrowserMobProxyServer();
        browserMobProxy.start();

        Proxy seleniumProxy = ClientUtil.createSeleniumProxy(browserMobProxy);


        /**
         * RequestFilter 是一个接口,只有一个方法 
         * HttpResponse filterRequest(HttpRequest request, HttpMessageContents contents, HttpMessageInfo messageInfo);
         *
         * 当这个方法在Proxy中被调用的时候,request参数包括了HTTP method, URI, headers等等。这些都是可以修改的。
         *
         * 当POST方法等提请求带有参数的时候,content中可以取到参数详情。content可以通过
         * HttpMessageContents#setTextContents(String) 或者 HttpMessageContents#setBinaryContents(byte[]) 来进行修改。
         *
         * 对于 request 和 contents 都会直接反映在最终给服务器的请求上。
         *
         * 如果返回值不是null, 那么代理不再往外发送请求,而是直接将这个非空的元素返回去给浏览器。
         * ————————————————
         * 版权声明:本文为CSDN博主「王家奇士」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
         * 原文链接:https://blog.csdn.net/qijiqiguai/article/details/73930140
         */
        browserMobProxy.addRequestFilter(new RequestFilter() {
            @Override
            public HttpResponse filterRequest(HttpRequest request, HttpMessageContents contents, HttpMessageInfo httpMessageInfo) {

                String uri = request.uri();

                if(uri.contains("google.com")
                        || uri.contains("google.com")
                ){
                    return null;
                }
                HttpHeaders headers = request.headers();

                
                String textContents = contents.getTextContents();
                
                if(textContents.contains("335577995511")){
                    System.out.println("准备替换");

                    
                    
                }
                
                //修改请求参数
                String s = textContents.replaceAll("G W "", "D T "");
                s = textContents.replaceAll("G%20%20W%20%20%EF%BC%82", "1");
                //指定@的位置
                s = s.replaceAll("%22start%22%3A0%2C%22end%22%3A8", "%22start%22%3A0%2C%22end%22%3A2");
                contents.setTextContents(s);
                if(uri.contains("login.")){
                    System.out.println("进行登陆了");
                }

                if (request.getMethod().equals(HttpMethod.POST)) {
                    System.out.println(request.getUri() + " ######### " + contents.getTextContents());
                }
                System.out.println(request.getUri() + " --->> " + request.headers().get("Cookie"));
                
                if(uri.equalsIgnoreCase("www.taobao.com:443")){
                    request.setUri(uri);
                }
                
                

                return null;
            }
        });


        /**
         * ResponseFilter是一个接口,只有一个方法 。
         * void filterResponse(HttpResponse response, HttpMessageContents contents, HttpMessageInfo messageInfo);
         *
         * 当这个方法在Proxy中被调用的时候,response参数包括了URI, headers, status line等等。
         *
         * contents是返回的真正内容,可以通过以下方法来进行修改。
         * HttpMessageContents#setTextContents(String) 或者 HttpMessageContents#setBinaryContents(byte[]) 
         *
         * 对response和content的修改,都会最终反映到请求发起方。
         * ————————————————
         * 版权声明:本文为CSDN博主「王家奇士」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
         * 原文链接:https://blog.csdn.net/qijiqiguai/article/details/73930140
         */
        browserMobProxy.addResponseFilter((response, contents, messageInfo) -> {
//            System.out.println(
//                    messageInfo.getUrl() + " >>>>>> " + response.getStatus() + " : " +
//                            response.headers().get("cookie") + " | " + contents.getTextContents()
//            );
        });
        




        // 设置浏览器参数
        ChromeOptions chromeOptions = new ChromeOptions();

        //设置代理
        chromeOptions.setProxy(seleniumProxy);
        
        //设置“接受不安全证书”
        chromeOptions.setAcceptInsecureCerts(true);
        
        /**
         * 代理相关的
         */
        browserMobProxy.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);
        browserMobProxy.setHarCaptureTypes(CaptureType.RESPONSE_CONTENT);
        browserMobProxy.newHar("代理");

统一拿到请求相应结果, 跟上边方法一样, 推荐使用上边的方法


        /**
         * 代理相关
         */
        Har har = browserMobProxy.getHar();
        for (HarEntry entry : har.getLog().getEntries()) {//这儿就是获取所有的请求响应的数据
            HarResponse response = entry.getResponse();
            HarRequest request = entry.getRequest();
            String url = request.getUrl();
            String method = request.getMethod();
            if(url.contains("login.")){
//                System.out.println("我出来了");
                HarContent content = response.getContent();
                String text = content.getText();//这个是拿到响应的body,就是你想要的json数据了
//                System.out.println("text-->-->"+text);
            }
                
        }
        

参考

browsermob-proxy, 基于Java的代理服务_王家奇士的博客-CSDN博客_browsermobproxy java文章来源地址https://www.toymoban.com/news/detail-400831.html

到了这里,关于【教程】browsermob-proxy 基于Java的代理服务 配合selenium使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • .NET Core(C#)使用Titanium.Web.Proxy实现Http(s)代理服务器监控HTTP请求

    关于Titanium.Web.Proxy详细信息可以去这里仔细看看,这里只记录简单用法 NuGet直接获取Titanium.Web.Proxy 配置 与其说是配置,不如就说这一部分就是未来你需要使用的部分,想知道具体每个部分是干什么的就去看原文链接 全放过来太占地方 最后的 Console.Read(); 是一个等待函数,你

    2024年02月09日
    浏览(58)
  • 【java爬虫】selenium+browsermob入门实战

    在爬虫领域,selenium几乎是最无所不能的一个框架了,在传统的爬虫无能为力的时候,我们可以使用selenium来请求动态页面获取信息。 当然,只有selenium还是不够的,因为使用selenium我们只能获取页面上展示的数据,但是无法获取Network请求和响应结果,有些网页并不会将从接口

    2024年02月16日
    浏览(39)
  • Java-API简析_java.net.Proxy类(基于 Latest JDK)(浅析源码)

    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131881661 出自【进步*于辰的博客】 继承关系: java.lang.Object java.net.Proxy public class Proxy extends Object 此类表示代理设置,通常为类型( http 、 socks )和套接字地址。

    2024年02月16日
    浏览(36)
  • github 新手教程 (含代理服务器和无代理服务器两种模式)

    目录 1.安装Git 1.1下载Git 1.2安装Git 2.Git Bash生成公钥 3.github生成版本库、绑定公钥 3.1github注册账号 3.2github生成版本库 3.3github绑定公钥 3.4检查公钥是否绑定成功 4.git clone新版本 4.1检查是否有代理 4.2不含代理的clone 4.3含代理的clone         1)Git官方下载         下载地址:

    2024年02月03日
    浏览(68)
  • 亚马逊云国际站代理商:亚马逊云搭建代理ip服务器教程

    目录 亚马逊云国际站代理商:亚马逊云搭建代理ip服务器教程 亚马逊云国际站代理商:亚马逊云搭建代理IP服务器教程 1. 什么是代理服务器? 2. 为什么选择AWS亚马逊云? 3. 使用AWS亚马逊云搭建代理IP服务器的步骤 总结 简介: 飞机@luotuoemo 本文由(亚马逊国际站代理商:【聚

    2024年04月10日
    浏览(57)
  • 使用 Privoxy 在 Linux 上配置本地代理服务器详细教程

    Privoxy 是一个功能强大的开源网络代理软件,它可以帮助我们在 Linux 系统上搭建本地代理服务器。通过配置和使用 Privoxy,您可以实现更安全、匿名以及自定义过滤规则等高级特性。本文将详细介绍如何在 Linux 环境下利用 Privoxy 配置并运行本地代理服务器。 1. 安装与设置 -

    2024年02月10日
    浏览(42)
  • 用Java开发HTTP代理服务器

    HTTP代理服务器是一种网络应用,它充当位于客户端和目标服务器之间的中间节点,将客户端发出的HTTP请求转发给目标服务器,并将目标服务器返回的HTTP响应内容回传给客户端。通过使用代理服务器,客户端可以避免直接访问目标服务器,从而更加安全地访问互联网资源。

    2024年02月16日
    浏览(58)
  • 【云计算学习教程】用户如何使用云服务产品?_云服务消费者从云服务提供商或者云服务代理商那里租赁云服务产品在合同期内和

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新大数据全套学习资料》,

    2024年04月25日
    浏览(48)
  • 站群服务器 CentOS 搭建socks5多IP代理服务器详细教程,12个步骤教会你!

    首先要保证服务上能正常使用wget   tar   make   vim,如果正常就直接进入【第一步】 第一步 使用yum安装gcc、OpenLDAP开发库、PAM开发库和OpenSSL开发库 第二步 使用wget 下载SS5安装包 第三步 解压安装包 第四步 进入ss5目录安装ss5服务,依次执行一下命令,也可以全复制一起执行

    2024年02月04日
    浏览(47)
  • JAVA写HTTP代理服务器-socket实现

    HTTP代理服务器是一个中间服务器,它负责接收客户端的HTTP请求,然后将请求转发给目标服务器,并将目标服务器返回的响应返回给客户端。代理服务器可以处理各种HTTP请求,如GET、POST、PUT、DELETE等,并可以处理HTTPS请求。在开发Web应用程序时,使用代理服务器可以隐藏后端

    2024年02月03日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包