之前调用过别的公司的接口上传数据,但是遇到个问题就是Connection reset,查阅了网上的各种资料,说什么的都有,主要意思就是说发布接口和调用接口的某些配置不一样,但是这个怎么说呢,单方面没办法解决,只能是双方协调,但是还不一定能够解决,因为我遇到的情况根本不一样,废话不多说,进入主题。

  先说我遇到的情况:

     1、公司网络有限制,需要使用代理

     2、调用接口访问的是公网地址

     3、调用接口一直返回Connection reset

  如果你的情况和我类似,建议你试试我的办法。

  我先试了一下,该端口连接从设置了代理的浏览器是能够访问的,放在eclipse代码中就是不行,然后写了一个测试类,测试通过url从网上下载图片,结果还是报错Connection reset,这个时候就说明公司网络有问题,因为eclipse 需要设置一下java vm代理:菜单栏 run -> run Configurations -> (右侧)Arguments -> vm arguments ,填入: -Dhttp.proxyHost=代理ip  -Dhttp.proxyPort=代理端口 -> apply,然后就会发现,可以从网上下载图片了。

  但是这个时候调用接口还是不行的,所以还不是解决办法,接下来使用代理访问端口就完美解决了:

一、GET方式

  /**
* @描述:HttpURLConnection 接口调用 GET方式
* @param strUrl 请求地址
* @param param 请求参数拼接
* @return 请求结果集
*/
public static String httpURLConectionGET(String strUrl, String param) {
StringBuffer sb = new StringBuffer(""); BufferedReader br =null;
HttpURLConnection connection =null;
try {
strUrl = strUrl + "?" + param.trim();
URL url = new URL(strUrl); // 把字符串转换为URL请求地址 // 实例化本地代理对象
Proxy proxy= new Proxy(Proxy.Type.HTTP,new InetSocketAddress(proxyIp,proxyPort));
Authenticator.setDefault(new SimpleAuthenticator(proxyUserName,proxyPassword)); connection = (HttpURLConnection) url.openConnection(proxy);// 打开连接
connection.setConnectTimeout(60000);
connection.setDoOutput(true);
connection.connect();// 连接会话 if(connection.getResponseCode()==200){
// 获取输入流
br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = br.readLine()) != null) {// 循环读取流
sb.append(line);
}
}else{
System.out.println("请求失败!HTTP Status:"+connection.getResponseCode());
} } catch (Exception e) {
e.printStackTrace();
System.out.println("失败!");
}finally{
try {
if(br != null){
br.close();// 关闭流
}
if(connection != null){
connection.disconnect();// 断开连接
}
} catch (IOException e) {
e.printStackTrace();
} }
return sb.toString();
}

二、POST方式

 /**
* 将字符串发送到指定url地址
* @param url 请求地址
* @param content 请求内容
* @return 请求结果集
*/
public static String httpPost(String url, String content) {
String strResult = "";
CloseableHttpClient httpclient =null;
HttpEntity resEntity;
CloseableHttpResponse response;
try {
StringEntity myEntity = new StringEntity(content, "UTF-8");
HttpPost httpPost = new HttpPost(url); CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(new AuthScope(proxyIp, proxyPort),
new UsernamePasswordCredentials(proxyUserName, proxyPassword)); HttpHost proxy = new HttpHost(proxyIp,proxyPort); RequestConfig requestConfig = RequestConfig.custom().setProxy(proxy)
.setConnectTimeout(120000).setConnectionRequestTimeout(120000)
.setSocketTimeout(120000).build(); httpclient = HttpClients.custom()
.setDefaultCredentialsProvider(credsProvider)
.setDefaultRequestConfig(requestConfig)
.build(); httpPost.addHeader("Content-Type", "text/xml; charset=UTF-8");
httpPost.setEntity(myEntity);
response = httpclient.execute(httpPost); resEntity = response.getEntity();
if (response.getStatusLine().getStatusCode()==200 && resEntity != null) {
strResult = EntityUtils.toString(resEntity, "UTF-8");
}
response.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println("接口异常:" + e.getMessage());
} finally {
if (httpclient != null) {
try {
httpclient.close();
} catch (IOException e) {
e.printStackTrace();
System.out.println("关闭httpclient异常:" + e.getMessage());
}
}
}
return strResult;
}

三、POST方式 (接口调用参数拼接)

 /**
* @描述:接口调用参数拼接POST方式
* @param strUrl 请求地址
* @param param 请求参数拼接
* @return 请求结果集
*/
public static String httpURLConectionParamPOST(String strUrl, String param) {
StringBuffer sb = new StringBuffer("");
BufferedReader br =null;
HttpURLConnection connection =null;
Proxy proxy = null;
try {
strUrl = strUrl + "?" + param.trim();
URL url = new URL(strUrl); // 把字符串转换为URL请求地址 proxy = new Proxy(Proxy.Type.HTTP,new InetSocketAddress(proxyIp,proxyPort)); // 实例化本地代理对象 Authenticator.setDefault(new SimpleAuthenticator(proxyUserName,proxyPassword)); connection = (HttpURLConnection) url.openConnection(proxy);// 打开连接 connection.setConnectTimeout(60000);
connection.setDoOutput(true);
connection.setUseCaches(false);
connection.setRequestMethod("POST");
connection.connect();// 连接会话 if(connection.getResponseCode()==200){
// 获取输入流
br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = br.readLine()) != null) {// 循环读取流
sb.append(line);
}
}else{
System.out.println("请求失败!HTTP Status:"+connection.getResponseCode());
} } catch (Exception e) {
e.printStackTrace();
System.out.println("请求异常!");
}finally{
try {
if(br != null){
br.close();// 关闭流
}
if(connection != null){
connection.disconnect();// 断开连接
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("连接关闭异常!");
} }
return sb.toString();
}

* 注:本博文代码参考 https://blog.csdn.net/u012909738/article/details/79298021

关于调用接口 Connection reset 问题(使用代理调接口)的更多相关文章

  1. jmeter测试文件上传接口报错:connection reset by peer: socket write error

    最近在对文件上传接口性能测试时,设置150线程数并发时,总会出现以下错误:connection reset by peer: socket write error 在网上搜索了一下,得到的原因有这些: ...

  2. Java socket 说明 以及web 出现java.net.SocketException:(Connection reset或者Connectreset by peer:Socket write error)的解释

    另外http://www.cnblogs.com/fengmk2/archive/2007/01/15/using-Socket.html可供参考   一Java socket 说明 所谓socket ...

  3. SSLv3协议、TLSv1.2协议配置不对导致javax.ws.rs.ProcessingException: java.net.SocketException: Connection reset

    SSl:Secure Sockets Layer 安全套接层 TLS:Transport Layer Security传输层安全 是为网络通信提供安全及数据完整性的一种安全协议.TLS与SSL在传输层 ...

  4. connection reset 分析解决(转载)

    文章转自:https://my.oschina.net/xionghui/blog/508758;记录下来以便以后复习查阅; 在使用HttpClient调用后台resetful服务时,“Connect ...

  5. Connection reset原因分析和解决方案

    在使用HttpClient调用后台resetful服务时,“Connection reset”是一个比较常见的问题,有同学跟我私信说被这个问题困扰很久了,今天就来分析下,希望能帮到大家.例如我们线上的 ...

  6. 重新分析connection reset by peer, socket write error错误原因

    上次写<connection reset by peer, socket write error问题排查>已经过去大半年,当时把问题"敷衍"过去了. 但是此后每隔一段时 ...

  7. 短连接时出现connection reset问题的原因

    网上摘取的感觉有用的文章,保存下来,让大家学习交流! 在使用HttpClient调用后台resetful服务时,“Connection reset”是一个比较常见的问题,有同学跟我私信说被这个问题困扰 ...

  8. 转:Connection reset原因分析和解决方案

    在使用HttpClient调用后台resetful服务时,“Connection reset”是一个比较常见的问题,有同学跟我私信说被这个问题困扰很久了,今天就来分析下,希望能帮到大家.例如我们线上的 ...

  9. [Think In Java]基础拾遗1 - 对象初始化、垃圾回收器、继承、组合、代理、接口、抽象类

    目录 第一章 对象导论第二章 一切都是对象第三章 操作符第四章 控制执行流程第五章 初始化与清理第六章 访问权限控制第七章 复用类第九章 接口 第一章 对象导论 1. 对象的数据位于何处? 有两种方式 ...

随机推荐

  1. Can't bind to 'ngModel' since it isn't a known property of 'input'.

    angular项目启动报错 Can't bind to 'ngModel' since it isn't a known property of 'input'. 原因:当前module模块未引入 ' ...

  2. 详解多线程MT和多线程MD的区别

    这段时间司在招实习生,而不管是远程的电话面试或者是实际现场面试中领导都喜欢问你这个问题,但是可惜的是能很好答上来的人很少.后来发现不管是应届的实习生,甚至有些实际参加工作几年的人也未必真的了解这个问题 ...

  3. 1.BMap(百度地图)第二次加载显示不全

    问题: bmap第一次加载显示没问题: 第二次 再次加载这个页面时,地图的显示出现了问题: . 分析问题出现原因:你要确保dom创建后且处于显示状态(即display不能为none)才能再次初始化地图 ...

  4. CentOS7服务器状态下安装xampp

    遇到的问题 1.远程不能访问phpmyadmin,只能在本地访问,但是本地为命令行模式. 需要修改一下服务器端的配置,我们找到 /opt/lampp/etc/extra/httpd-xampp.con ...

  5. 在Docker中使用Microsoft SQL Server数据库

    下图中对SQL Server容器创建及数据库创建等操作进行了记录,方便自己日后查看.(文中的 * 仅表示隐藏自己的个人信息,手动马赛克,哈哈-) Docker下载可看上一篇博文mac系统,docker ...

  6. zabbix-agent不能启动:配置文件出现特殊字符导致

    问题如下: 定位查找问题: 命令:journalctl  -xe [重点] 图中可见错误信息在zabbix_agent配置文件中的“hostname=”中不能出现特殊字符,我出错的原因是写成了:hos ...

  7. touch命令修改时间

    实例[rhel7]: [root@localhost test]# stat 1.txt 文件:"1.txt" 大小:0 块:0 IO 块:4096 普通空文件设备:fd00h/6 ...

  8. 每天进步一点点------Sobel算子(2)

    转载  http://blog.csdn.net/tianhai110 索贝尔算子(Sobel operator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值. ...

  9. Springmvc-crud-02错误(添加出现中文乱码)

    错误: 在进行添加页面时使用post请求,输入中文时会出现乱码 原因: post请求不支持gbk格式,使用字符编码过滤器,设置为UTF-8编码即可 注意配置请求的字符集和响应字符集 解决方案:需要放在 ...

  10. buuctf Easysql 小记

    堆叠注入 利用原理: 补充系统变量@@sql_modesql_mode:是一组mysql支持的基本语法及校验规则PIPES_AS_CONCAT:将“||”视为字符串的连接操作符而非或运算符,这和Ora ...