当前位置: 首页 > news >正文

SpringBoot 设置HTTP代理访问

SpringBoot 设置HTTP代理访问

遇到这样的一个场景,代码部署到私有服务器上去之后,这台私有服务器a无法直接访问公网,需要通过代理转发到另外一台专门访问公网的服务器b, 让服务器b去请求对应的公网ip,于是就需要设置Http代理。

通常使用springboot会用到两种不同的httpclient

  • spring-boot-starter-webflux 这个包下面的WebClient

  • Spring-web 这个包下面的RestTemplate

WebClient

通过设置Httpclinet添加绑定的代理地址,然后给WebClient里添加这个Httpclient

HttpClient httpClient  = HttpClient.create().proxy(proxy -> proxy.type(ProxyProvider.Proxy.HTTP).address(new InetSocketAddress("192.168.0.1", 8080))  // 你的代理IP和端口);
​
WebClient webClient = webClientBuilder.baseUrl("https://www.baidu.com").clientConnector(new ReactorClientHttpConnector(httpClient)).build();
​
​
String result = webClient.get().retrieve().bodyToMono(String.class).block();

RestTemplate

// 服务器代理
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("192.168.0.1", 8080));
// 配置 request factory
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setProxy(proxy);
​
RestTemplate restTemplate = new RestTemplate();
ProxySetting proxySetting = SpringContextHolder.getBean(ProxySetting.class);
// This allows us to read the response more than once - Necessary for debugging.
// 如果开启代理,则配置走服务器代理。否则走本地调试
if (proxySetting.isEnable()) {restTemplate.setRequestFactory(requestFactory);
} else {restTemplate.setRequestFactory(new SimpleClientHttpRequestFactory());
}
​
DefaultUriBuilderFactory uriBuilderFactory = new DefaultUriBuilderFactory();     uriBuilderFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.VALUES_ONLY);
restTemplate.setUriTemplateHandler(uriBuilderFactory);
​
String url = "https://www.baidu.com"
String response = restTemplate.getForObject(url, String.class);

相关文章:

  • C++智能指针应用详解:从原理到实战
  • Rust 学习笔记:关于结构体的例题
  • 【中间件】bthread效率为什么高?
  • 独立开发者工具 • 半月刊 第 008 期
  • 手机查看 log 工具 vConsole
  • 后端接口请求http改为https
  • K8S - 从零构建 Docker 镜像与容器
  • DINOv2 - 无监督学习鲁棒视觉特征
  • 数字化时代第三方软件测评中心如何保障软件质量?
  • 计算机中的进制
  • pytorch中的变量内存分配
  • C++,设计模式,【建造者模式】
  • 08 Python集合:数据 “去重神器” 和运算魔法
  • 基于springboot的核酸检测管理系统(源码+数据库)
  • 数据库服务器备份,数据库服备份到另一台服务器的方法有哪些?
  • 【java】输入
  • 【单例模式】简介
  • 服务器频繁重启日志分析与诊断
  • AttributeError: module ‘distutils‘ has no attribute ‘version‘
  • Unity URPShader:实现和PS一样的色相/饱和度调整参数效果(修复)
  • 江西4人拟任县(市、区)委书记,其中一人为“80后”
  • “80后”萍乡市安源区区长邱伟,拟任县(区)委书记
  • 上海博物馆展览进校园,“小先生”传递文物知识
  • 七猫征文大赛颁出112万奖金,非遗题材作品斩获金奖
  • 四川甘孜炉霍县觉日寺管委会主任呷玛降泽被查
  • 俄外交部:俄乌伊斯坦布尔谈判改在当地时间15日下午举行