HttpCLient请求困扰了两天的问题
来源:互联网 发布:天河工商局软件地址 编辑:程序博客网 时间:2024/04/29 12:53
**问题起因是测试过程中部署到阿里云服务器,通过vpn访问内网前置机发送查询报文,出现了消息无返回结果的情况**
- 写个小程序放在阿里云服务器充当客户端,服务端测试程序放在内网服务器上,双方分别打印日志观察消息传递情况
- 客户端小程序照搬了项目中发送httpclient请求的代码
- 服务端最初用socket模拟了接收http请求并返回信息
- 自己的小程序发送,响应并未出现类似状况
- 将客户端改成访问前置机,返回结果的频率并无任何规律,有时候有结果有时候是空字符串
- 修改了客户端程序,在服务端直接用controller接收http请求,然后返回结果,当然,在此期间遇见了数不清的梗儿,比如Controller要不被安全框架拦截,并且为了让项目中返回xml折腾了很久,终于发现直接请求到controller返回字符串也好,xml也好都没结果,百思不得其解了
- 突然发现某博客httpclient请求与我们的代码稍有差池(便是这一行:byte[] bytes = new byte[1024];)
- 改成这样,效果杠杠滴
客户端代码
package com.test.vpn;import java.io.BufferedInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpStatus;import org.apache.commons.httpclient.methods.PostMethod;import org.apache.commons.httpclient.methods.StringRequestEntity;import org.apache.log4j.Logger;import org.apache.log4j.xml.DOMConfigurator;public class TestClient { public static final Logger logger = Logger.getLogger(TestClient.class); public static String connectionExceptionString = "<?xml version=\"1.0\" encoding=\"GBK\"?><stream><status>TIMEOUT</status><statusText>服务器访问出错</statusText><list name=\"userDataList\"><row><status>AAAAAAA</status><statusText>交易成功</statusText><stt>0</stt></row></list></stream>"; static { DOMConfigurator.configure(System.getProperty("user.dir") + File.separator + "conf" + File.separator + "log4j.xml"); } public static String post(String url, String xmlInfo, String charset) { // 关闭 System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog"); System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true"); System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient","stdout"); // 创建httpclient工具对象 HttpClient client = new HttpClient(); // 创建post请求方法 PostMethod myPost = new PostMethod(url); // 设置请求超时时间 client.getHttpConnectionManager().getParams().setConnectionTimeout(300 * 1000); String responseString = null; try { // 设置请求头部类型 myPost.setRequestHeader("Content-Type", "text/xml"); myPost.setRequestHeader("charset", charset); // 设置请求体,即xml文本内容,注:这里写了两种方式,一种是直接获取xml内容字符串,一种是读取xml文件以流的形式 myPost.setRequestEntity(new StringRequestEntity(xmlInfo, "text/xml", charset)); //myPost.setRequestEntity(new StringRequestEntity(xmlString,"text/xml","utf-8")); int statusCode = client.executeMethod(myPost); try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(statusCode); if (statusCode == HttpStatus.SC_OK) { BufferedInputStream bis = new BufferedInputStream(myPost.getResponseBodyAsStream()); byte[] bytes = new byte[1024];// byte[] bytes = new byte[bis.available()]; ByteArrayOutputStream bos = new ByteArrayOutputStream(); int count = 0; while ((count = bis.read(bytes)) != -1) { if(count == 0){ break ; } bos.write(bytes, 0, count); } byte[] strByte = bos.toByteArray(); responseString = new String(strByte, 0, strByte.length, charset); logger.info("返回结果:"+responseString); bos.close(); bis.close(); } }catch (Exception e) { logger.info("",e); return connectionExceptionString; }finally{ if(myPost != null) myPost.releaseConnection(); } return responseString; } public static void main(String[] args) { for(int i=0; i<100; i++){ logger.info("第"+i+"次"); StringBuffer sb = new StringBuffer(); sb.append("<?xml version=\"1.0\" encoding=\"GBK\"?>"); sb.append("<stream><action>DLSBALQR</action><userName>XXX</userName><accountNo>11</accountNo><subAccNo>010</subAccNo></stream>"); logger.info("发送内容"+sb.toString()); TestClient.post("http://192.168.0.100:8080/v2/appTestVpn/testVpn.app", sb.toString(), "GBK"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }}
阅读全文
0 0
- HttpCLient请求困扰了两天的问题
- 困扰了我两天的一个exception
- 一个困扰两天的创建动态控件的问题
- 纪念困扰我两天的问题Brute-Force算法
- 困扰了一段时间的端口开放问题
- 困扰很久的问题。今天下午搞定了。
- 汇总一些困扰了很久的问题
- 困扰了好久的弱智问题
- 折腾了快两天的问题
- 电脑貌似中毒了 学习YII 困扰两天
- 困扰了一个星期的XML问题终于解决了
- 解决了困扰一整天的纹理颜色设置的问题
- 困扰许久的文泉驿显示慢问题终于解决了
- 终于解决了myeclipse困扰我许久的乱码问题!!
- 困扰半个多月的问题,解决了:(
- 困扰我一周的问题应该是有解了
- 一个困扰了我2天的问题。
- 困扰了我一年多的问题,今天才发现,杯具啊
- idea多模块开发
- Mac OS 安装 与 卸载 JDK
- Email 控件Aspose.Email 12月新版17.12发布 | 附下载
- 项目服务端的创建(丛林战争项目)
- Oracle中查询前10条记录
- HttpCLient请求困扰了两天的问题
- JAVA回调机制(CallBack)详解
- 数据库设计之冗余字段
- 大数据储存安全的重要性
- java 设计模式学习前篇--设计模式理解
- python中数组去重
- 我生成参数而我们是不是填错了哪里啊!怎么搞都没有成功!有大神能帮帮我吗??
- 28个Java常用的工具类之交易前置系统专用工具类
- STM32 采集SHT10传感器数据(非float)