之前调用过别的公司的接口上传数据,但是遇到个问题就是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. JavaScript arguments对象浅析

    arguments对象 概念 用法 属性 arguments对象 概念 arguments 是一个类数组对象.代表传给一个function的参数列表. 用法 function a() { consol ...

  2. MyBatis(5)——解决属性名与列名不一致的问题

    解决属性名与列名不一致的问题 问题描述: 当实体类的属性与数据库的列名不对应时取不到该列数据 说明:MyBatis会根据查询的列名设值(列名的setter方法),然后以此列名为做查询等操作,在此过程中 ...

  3. my97日期控件弹出位置显示异常

    使用my97日期选择控件的时候,如果整个页面是有滚动条的,根据触发显示日期的控件的父控件的position不同会显示不同的情况 1.position不为fixed则滑动滚动条,显示的日期层不会出现异常 ...

  4. 线索二叉树的详细实现(C++)

    线索二叉树概述 二叉树虽然是非线性结构,但二叉树的遍历却为二又树的结点集导出了一个线性序列.希望很快找到某一结点的前驱或后继,但不希望每次都要对二叉树遍历一遍,这就需要把每个结点的前驱和后继信息记录下 ...

  5. mescroll.js简单的上拉加载、下拉刷新插件,带完整注释

    声明:本插件模仿自mescroll.js,随手所作,仅以注释提供思路,只实现了部分效果,且没有考虑兼容,有兴趣的朋友随意一看.api大家可参考mescroll.js API汇总一文. demo:点我下 ...

  6. java基础(温故而知新)

    一 数据类型 1.1 8种基本数据类型 1.2 引用数据类型 1.3 java内存机制 1.3.1 寄存器 1.3.2 栈 1.3.3 堆 1.3.4. 静态区/方法区 1.3.5. 运行时常量池(R ...

  7. 外键约束:foreign key

    *外键 foreign key* 1.概念:如果一个实体的(student)的某个字段,指向(引用)另个实体(class)的主键 (class:class_id),就称为student实体的class ...

  8. sublime-text3 安装 emmet 插件

    下载sublime,http://www.sublimetext.com/ 安装package control :https://packagecontrol.io/ins... 这个地址需要翻墙,访 ...

  9. javaScript中的toFix(n)方法

    定义和用法 toFixed() 方法可把 Number 四舍五入为指定小数位数的数字. 语法 NumberObject.toFixed(num) 返回值 返回 NumberObject 的字符串表示, ...

  10. Selenium元素定位之页面检测技巧

    我们在进行web自动化测试的时候进行XPath或者CSS定位,需要检测页面元素定位是否正确,如果用脚本去检测,那么效率是极低的. 一般网上推选装额外的插件来实现页面元素定位检测 如:firebug. ...