HttpClient内外访问外网,添加代理(二)

HttpClient内外访问外网,添加代理(二)

  • 问题背景
      • HttpClient工具类调用url实例,附源码(一)
      • HttpClient内外访问外网,添加代理(二)
  • 项目搭建
  • Lyric: 你已走得很远

问题背景

有时候不是任何网络都可以访问自己的程序,自己也不能随意访问外网,做安全隔离,但有时确实需要与外面交互,这个时候就需要使用外网代理了
注意事项:

  • 代码可以复用上一篇文章,添加一点小改动就行了

HttpClient工具类调用url实例,附源码(一)

HttpClient内外访问外网,添加代理(二)

项目搭建

1 在httpclient工具类中添加代理

/** Copyright 2019 The FATE Authors. All Rights Reserved.** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at**     http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/
package com.yg.thirdtest.utils;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpStatus;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.message.BasicHeader;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Service;import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.util.Map;@Service
@Slf4j
public class HttpClientPoolUtil implements InitializingBean {private PoolingHttpClientConnectionManager poolConnManager;private RequestConfig requestConfig;private CloseableHttpClient httpClient;private static void config(HttpRequestBase httpRequestBase) {RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(20000).setConnectTimeout(20000).setSocketTimeout(20000).build();httpRequestBase.addHeader("Content-Type", "application/json;charset=UTF-8");httpRequestBase.setConfig(requestConfig);}private void initPool() {try {SSLContextBuilder builder = new SSLContextBuilder();builder.loadTrustMaterial(null, new TrustSelfSignedStrategy());SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(builder.build());Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create().register("http", PlainConnectionSocketFactory.getSocketFactory()).register("https", sslsf).build();poolConnManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);poolConnManager.setMaxTotal(500);poolConnManager.setDefaultMaxPerRoute(500);int socketTimeout = 1200000;int connectTimeout = 100000;int connectionRequestTimeout = 100000;HttpHost proxy = new HttpHost("172.16.12.144", 1118);requestConfig = RequestConfig.custom().setConnectionRequestTimeout(connectionRequestTimeout).setSocketTimeout(socketTimeout).setConnectTimeout(connectTimeout).setProxy(proxy).build();
//            requestConfig = RequestConfig.custom().setConnectionRequestTimeout(
//                    connectionRequestTimeout).setSocketTimeout(socketTimeout).setConnectTimeout(
//                    connectTimeout).build();httpClient = getConnection();} catch (NoSuchAlgorithmException | KeyStoreException | KeyManagementException e) {e.printStackTrace();}}private CloseableHttpClient getConnection() {CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(poolConnManager).setDefaultRequestConfig(requestConfig).setRetryHandler(new DefaultHttpRequestRetryHandler(2, false)).build();return httpClient;}public JSONObject postForJsonObject(String url, String jsonStr) {log.debug("url = " + url + " ,  json = " + jsonStr);long start = System.currentTimeMillis();CloseableHttpResponse response = null;try {// 创建httpPostHttpPost httpPost = new HttpPost(url);httpPost.setHeader("Accept", "application/json");StringEntity entity = new StringEntity(jsonStr, "UTF-8");entity.setContentType("application/json");entity.setContentEncoding(new BasicHeader("Content-Type", "application/json"));httpPost.setEntity(entity);//发送post请求response = httpClient.execute(httpPost);if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {JSONObject result = JSONObject.parseObject(EntityUtils.toString(response.getEntity()));log.debug("request success cost = {}, result = {}", System.currentTimeMillis() - start, result);return result;} else {log.error("bad response: {}", JSONObject.parseObject(EntityUtils.toString(response.getEntity())));}} catch (Exception e) {log.error("=============[\"异常\"]======================, e: {}", e);} finally {if (response != null) {try {response.close();} catch (IOException e) {e.printStackTrace();}}}return null;}public String post(String url, Map<String, Object> requestData) {HttpPost httpPost = new HttpPost(url);config(httpPost);StringEntity stringEntity = new StringEntity(JSON.toJSONString(requestData), "UTF-8");stringEntity.setContentEncoding(StandardCharsets.UTF_8.toString());httpPost.setEntity(stringEntity);return getResponse(httpPost);}public JSONArray post(String url, String jsonStr) {log.debug("url = " + url + " ,  json = " + jsonStr);long start = System.currentTimeMillis();CloseableHttpResponse response = null;JSONArray result = new JSONArray();try {// 创建httpPostHttpPost httpPost = new HttpPost(url);httpPost.setHeader("Accept", "application/json");StringEntity entity = new StringEntity(jsonStr, StandardCharsets.UTF_8.toString());entity.setContentType("application/json");entity.setContentEncoding(new BasicHeader("Content-Type", "application/json"));httpPost.setEntity(entity);//发送post请求response = httpClient.execute(httpPost);if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {result = JSONObject.parseArray(EntityUtils.toString(response.getEntity()));log.debug("request success cost = {}, result = {}", System.currentTimeMillis() - start, result);return result;} else {log.error("bad response, result: {}", EntityUtils.toString(response.getEntity()));}} catch (Exception e) {log.error("=============[\"异常\"]======================, e: {}", e);} finally {if (response != null) {try {response.close();} catch (IOException e) {e.printStackTrace();}}}return result;}public String get(String url) {HttpGet httpGet = new HttpGet(url);config(httpGet);return getResponse(httpGet);}private String getResponse(HttpRequestBase request) {CloseableHttpResponse response = null;try {response = httpClient.execute(request,HttpClientContext.create());HttpEntity entity = response.getEntity();String result = EntityUtils.toString(entity, StandardCharsets.UTF_8.toString());EntityUtils.consume(entity);return result;} catch (IOException e) {log.error("send http error", e);return "";} finally {try {if (response != null) {response.close();}} catch (IOException e) {e.printStackTrace();}}}@Overridepublic void afterPropertiesSet() throws Exception {initPool();}
}

主要就是这几行进行更改

            HttpHost proxy = new HttpHost("172.16.12.144", 1118);requestConfig = RequestConfig.custom().setConnectionRequestTimeout(connectionRequestTimeout).setSocketTimeout(socketTimeout).setConnectTimeout(connectTimeout).setProxy(proxy).build();




作为程序员第 97 篇文章,每次写一句歌词记录一下,看看人生有几首歌的时间,wahahaha …

Lyric: 你已走得很远

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/9459.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Thinkphp5设置反代理

目的&#xff1a;节省OSS外网访问流出流量 购买了阿里云OSS的存储资源包后&#xff0c;发现还需要外网访问流出费用&#xff0c;内网访问是免费的。 百度得相关方法&#xff0c;即设置反向代理。前提是服务器和OSS存储桶需要属于同一个地区。 一、环境 服务器环境 Nginx 1.20…

端口转发与代理工具 内网代理 内网反弹代理

目录 一、LCX 二、nc 反弹 三、socks代理工具 四、frp 内网穿透利器 五、ngrok 内网穿透 理论上&#xff0c;任何接入互联网的计算机都是可访问的&#xff0c;但是如果目标主机处于内网&#xff0c;而我们又想和该目标主机进行通信的话&#xff0c;就需要借助一些端口转发…

Langchain对设置代理地址

可以通过如下方式对ChatOpenAI设置代理地址api_base from langchain.chat_models import ChatOpenAI import os OPENAI_API_BASEhttps://xxx/v1 openaichat ChatOpenAI(model_name"gpt-3.5-turbo", api_baseOPENAI_API_BASE) 参考源码如下 langchain源码 openai源…

巧用chatGPT解决生产者消费者问题

背景 学校的操作系统课程布置了一项实验&#xff0c;是关于生产者消费者问题的&#xff0c;一开始毫无头绪&#xff0c;通过搜索引擎搜索出来的内容也五花八门&#xff0c;之后就想着能不能借助chatGPT解决这一个实验。 实验要求 1.编写程序解决生产者与消费者问题&#xff…

用户注册页面接入短信验证功能的注意点?

网站或者app的用户注册页面&#xff0c;在接入手机短信验证接口的时候&#xff0c;多少都会遇到一些问题&#xff0c;这里就将这些问题及处理方案分享一下&#xff1a; 一、注册页面被刷 如果注册页面未做必要的防范的话&#xff0c;页面上的短信接口很容易被刷&#xff0c;造…

tp短信验证码(配置以及使用)

阿里云短信验证码 今天搞了一个短信的验证码&#xff0c;用的是阿里云的平台&#xff0c;https://cn.aliyun.com/ss/?k%E7%9F%AD%E4%BF%A1api&#xff0c;免费的验证码测试&#xff0c;不用充钱了。阿里的api有很多也有很多免费测试的接口&#xff08;其实冲一块钱&#xff0c…

tp6 短信发送验证码

更改配置文件 app.php 里添加 //前端模块default_module >home,在config文件下cache.php里面去添加redis配置 // 缓存连接方式配置stores > [file > [// 驱动方式type > File,// 缓存保存目录path > ,// 缓存前缀prefix > ,// 缓存有效期…

有了域名想绑定域名邮箱?拥有域名后,如何免费绑定邮箱呢?如何使用【昵称@你的.域名】收发邮件

有了域名想绑定域名邮箱&#xff1f;拥有域名后&#xff0c;如何免费绑定邮箱呢&#xff1f;如何使用【昵称你的.域名】收发邮件 前提&#xff1a; 如文章标题&#xff0c;此篇文章的前提是“已经拥有了自己的域名” 有了自己的域名后&#xff0c;采用本篇文章的方式&#xf…

ios系统邮件怎么绑定QQ邮箱

一、做准备工作&#xff0c;开启IMAP/SMTP服务&#xff0c;怎么开启的教程就在↓如何开启QQ邮箱IMAP/SMTP服务&#xff1f;分享开启方法 - 三好电商网 然后你就获得了一串授权码 二、选择“邮件”app打开以下页面 三、选择QQ邮箱打开以下页面 四、电子邮件就填你的QQ邮箱账号…

其他邮箱如何绑定到常用的邮箱

背景介绍&#xff01; 一般我们国人最最最常用的邮箱就是QQ邮箱了&#xff0c;能推送到QQ、能搞成自己喜好的风格等等功能确实值得青睐。 最大的优点还是&#xff1a;可以及时收到别人发来的消息 当然&#xff0c;还有其他的邮箱各有各自的用处。例如大学生母校为学生准备的…

ChatGPT 掀起抢人大战,提示词工程师年薪近34万

火爆的ChatGPT ChatGPT 引发的资本盛宴还在持续上演&#xff0c;每个人都在谈论它背后的AI技术&#xff0c;每个人都在担心自己会不会被AI替代&#xff0c;但很少有人注意到&#xff0c;这项技术带来的新就业岗位。 这种岗位被称为“提示工程师”(Prompt Engineer)&#xff0c;…

ChatGPT之父传奇:8岁会编程,16岁出柜,2个月做到月活过亿

雷递网 雷建平 2月5日 聊天机器人ChatGPT的爆火&#xff0c;推出仅仅2个月&#xff0c;就达到月活过亿&#xff0c;成为历史上增长最快的消费者应用程序。 根据Sensor Tower数据&#xff0c;TikTok在全球推出后用约9个月时间达到1亿用户&#xff0c;Instagram用了30个月才达到同…

最爱 ChatGPT,每天编码 300 行,月薪 8k-17k 占比骤减!揭晓中国开发者真实现状...

作者 | 郑丽媛 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 瞬息万变的技术圈&#xff0c;似乎随时都在给予技术人数不清的机遇与挑战&#xff1a; 过去一年&#xff0c;频繁出圈的虚拟人曾一度将元宇宙的热度推至巅峰&#xff0c;如今却逐渐“悄无声息”&…

ChatGPT爆火至今,国内十余家知名公司竞相入局!高质量文本标注需求不断

2022年底OpenAi推出chatGpt&#xff0c;爆火至今。 据《华尔街日报》报道&#xff0c;百度将于3月16日左右推出类似ChatGPT的聊天机器人。科大讯飞预计今年5月落地ChatGPT相关AI学习机 。与此同时&#xff0c;更有腾讯、华为、字节、京东、360、网易、快手等 10 余家企业宣布有…

2022年大数据产业规模已超1000亿,从ChatGPT的爆火看大数据行业发展

哈喽大家好&#xff0c;小编注意到最近一段时间ChatGPT突然爆火&#xff0c;可能很多朋友已经体验过了ChatGPT的智能程度&#xff0c;体验过的小伙伴们可以留言交流下心得哦&#xff01; 聊天机器人ChatGPT的交流模型在经过大数据的浇灌后&#xff0c;展现出了令人大吃一惊的智…

香港科技大学:期中报告使用 ChatGPT 可加分;爆谷歌、微软已在韩国开始裁员;美国最大加密货币银行宣布关闭|极客头条

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&…

ChatGPT API的使用(一)

OpenAI除了提供ChatGPT聊天功能外&#xff0c;还提供了功能强大的图片生成与编辑功能&#xff0c;以及代码注释、语音转换功能&#xff0c;而这些功能需要通过API进行访问。 首先需要生成您的帐户独有的 API 密钥。访问此页面并创建一个新的密钥。 在这里需要点击复制&#xf…

php实现通过api实现chatgpt

<?php $textphp你知道咋样区分不同的两台电脑吗通过程序; $headers[] "Content-Type: application/json"; $headers[] "Authorization: Bearer sk-pmnyMNsajmyQowmzVZFDT3BlbkFJym66WY5eZlCIh23N";//换成自己key $url"https://api.openai.com/v…

ChatGPT如何帮助科研人员写作?

Nature Portfolio. 《自然》旗下期刊与服务集合&#xff0c;致力于服务科学界&#xff0c;我们提供一系列高质量的产品和服务&#xff0c;涵盖生命科学、物理、化学和应用科学。其中&#xff0c;《自然》期刊&#xff08;Nature&#xff09;创立于1869年&#xff0c;是国际领先…

Ubuntu 语言配置修改为英文

1、通过locale命令查看当前Ubuntu的语言配置&#xff0c;如图显示为中文配置 2、打开配置文件&#xff0c;进行修改 3、在配置文件最后一行&#xff0c;添加如下内容 4、使配置生效 5、再次查看配置&#xff0c;已经改成英文的了 另外一种方式&#xff1a; 编辑文件 /etc/defa…