get/post发送HTTP请求3
2012-05-05 12:01
447 查看
本节摘要:采用httpclient插件的post方式发送二进制数据流到http服务端
说明,本节在我之前的一篇博客get/post方式调用http接口的基础上来介绍,本节的代码和之前的这篇博客放在同一个工程目录的同一个包下。
与其他系统的同事联调的时候,总是出现一些问题,现把这些问题列出来,并在代码中得到了解决。
(1)请求的中文,服务器端接收到后为乱码
(2)客户端接收到服务器端的响应报文后,中文为乱码
(3)请求的报文中没有设置字符集,服务器报空指针异常
(4)客户端发送请求后,服务器端接收到的二进制数据的长度为0,报NegativeArraySizeExceptio异常
(5)服务端接收到客户端的报文后里面全是百分号以及英文字母(不用说,你懂的。)
之前介绍过采用JDK自带的java.net.HttpURLConnection(见博客get/post发送HTTP请求2)可以解决这个问题,但是项目中发现客户端很多同事都是采用的httpclient插件,那咱这次就用httpclient插件来发送post请求,并解决以上问题。服务端接收代码以及输出代码不能改,那么我们只能想千方设百计的去修改完善我们客户端的代码。
废话咱就不多说了,直接上代码
部署项目,启动tomc,运行客户端代码中的main方式
客户端的测试结果如下:
服务端的测试结果如下:
说明,本节在我之前的一篇博客get/post方式调用http接口的基础上来介绍,本节的代码和之前的这篇博客放在同一个工程目录的同一个包下。
1.背景介绍
最近项目中发布了一个HTTP服务,HTTP服务端采用二进制流来接收数据,与其他系统的同事联调的时候,总是出现一些问题,现把这些问题列出来,并在代码中得到了解决。
(1)请求的中文,服务器端接收到后为乱码
(2)客户端接收到服务器端的响应报文后,中文为乱码
(3)请求的报文中没有设置字符集,服务器报空指针异常
(4)客户端发送请求后,服务器端接收到的二进制数据的长度为0,报NegativeArraySizeExceptio异常
(5)服务端接收到客户端的报文后里面全是百分号以及英文字母(不用说,你懂的。)
之前介绍过采用JDK自带的java.net.HttpURLConnection(见博客get/post发送HTTP请求2)可以解决这个问题,但是项目中发现客户端很多同事都是采用的httpclient插件,那咱这次就用httpclient插件来发送post请求,并解决以上问题。服务端接收代码以及输出代码不能改,那么我们只能想千方设百计的去修改完善我们客户端的代码。
2.代码如下:
之前的博客get/post方式调用http接口,这个直接采用发送字符串的形式,也没有解决中文问题,废话咱就不多说了,直接上代码
(1)修改web.xml配置文件,增加以下几行
PostHttpClient.javapackage httpcall; import java.io.IOException; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.ByteArrayRequestEntity; import org.apache.commons.httpclient.methods.EntityEnclosingMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.RequestEntity; /** * *Module: PostHttpClient.java *Description: 采用httpclient插件的post方式发送流二进制流数据到HTTP服务端 *Company: *Author: pantp *Date: May 5, 2012 */ public class PostHttpClient { /** * 发送post请求,客户端采用二进制流发送,服务端采用二进制流介绍 * @param json 入参的json格式的报文 * @param url http服务器的地址 * @return 返回响应信息 */ public static String postHttpReq(String json,String url) { HttpClient httpClient = new HttpClient(); byte b[] = json.getBytes();//把字符串转换为二进制数据 RequestEntity requestEntity = new ByteArrayRequestEntity(b); EntityEnclosingMethod postMethod = new PostMethod(); postMethod.setRequestEntity(requestEntity);// 设置数据 postMethod.setPath(url);// 设置服务的url postMethod.setRequestHeader("Content-Type", "text/html;charset=GBK");// 设置请求头编码 // 设置连接超时 httpClient.getHttpConnectionManager().getParams().setConnectionTimeout( 5 * 1000); // 设置读取超时 httpClient.getHttpConnectionManager().getParams().setSoTimeout(20 * 1000); String responseMsg = ""; int statusCode = 0; try { statusCode = httpClient.executeMethod(postMethod);// 发送请求 responseMsg = postMethod.getResponseBodyAsString();// 获取返回值 } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { postMethod.releaseConnection();// 释放连接 } if (statusCode != HttpStatus.SC_OK) { System.out.println("HTTP服务异常" + statusCode); } return responseMsg; } //POST方式发送HTTP请求 public static void main(String[] args) { String json = "{\"PubInfo\": {\"clinet\": \"10.70.128.132\",\"company\": \"月月鸟0820\"},\"Request\": {\"strBillId\": \"18221075148\",\"strCcsOpId\": \"1234\"}}"; String url = "http://localhost:8080/UpDown/postHttpServer"; String outPackage = null; outPackage = postHttpReq(json, url); System.out.println("客户端日志----POST方式调用HTTP,请求报文为:" + json); System.out .println("\nauthor<pantp>===========客户端日志----POST方式调用HTTP服务,HTTP服务端响应报文如下:=============\n"); System.out.println(outPackage); System.out .println("\nauthor<pantp>================================================================\n"); } }
3.测试结果
部署项目,启动tomc,运行客户端代码中的main方式客户端的测试结果如下:
服务端的测试结果如下:
相关文章推荐
- JAVA发送http get/post请求,调用http接口、方法
- C++ 实现 发送HTTP Get/Post请求
- get/post发送HTTP请求2
- JAVA发送http get/post请求,调用http接口、方法
- JAVA发送http get/post请求,调用http接口、方法
- JAVA发送http get/post请求,调用http接口、方法
- JAVA发送http get/post请求,调用http接口、方法
- JAVA发送http get/post请求、调用http接口、方法
- c++ 使用libcurl 发送http get/post请求
- JAVA发送http get/post请求,调用http接口、方法
- Http发送GET/POST请求
- C++ 实现 发送HTTP Get/Post请求 good
- HttpClient发送Get和Post请求
- Multipart/form-data POST文件上传详解 理论 简单的HTTP POST 大家通过HTTP向服务器发送POST请求提交数据,都是通过form表单提交的,代码如下: <form me
- Android发送HTTP POST请求示范
- Android-HTTP实例——使用GET方法、POST方法发送请求(安卓4.0以下版本)
- Android HTTP实例 使用GET方法和POST方法发送请求
- 通过HttpWebRequest 发送 POST 请求实现自动登陆
- Android HTTP实例 使用GET方法和POST方法发送请求