`

HttpClient josn网络传输(二进制的byte流)

    博客分类:
  • JSON
 
阅读更多
现在越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源 ,今天就来讨论下 json 的传输形式。


Client 客户端
package httpjson;

import java.io.ByteArrayInputStream;
import java.io.InputStream;

import net.sf.json.JSONObject;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpClientParams;
import org.apache.log4j.Logger;
import org.junit.Test;


public class ClientDemo {

	private final static Logger _log = Logger.getLogger(ClientDemo.class);

	@Test
	public void login(){
		String url = "http://192.168.0.3:8081/httpjson/demoHttpJson" ;
	//	String url = "http://www.weibo.com.cn" ;
		JSONObject json = new JSONObject();
		json.put("username","test");
		json.put("password", "test");
		doPostClient(json, url);
	}

	@SuppressWarnings("deprecation")
	public static void doPostClient(JSONObject json ,String url){
		
		HttpClient httpClient = new HttpClient();
		//httpClient.getState().setCookiePolicy(CookiePolicy.COMPATIBILITY);
		System.setProperty("apache.commons.httpclient.cookiespec","COMPATIBILITY");
		PostMethod postMethod = new PostMethod(url);
		InputStream  in = new ByteArrayInputStream(json.toString().getBytes());
		postMethod.setRequestBody(in);
		HttpClientParams params = new HttpClientParams();
		params.setConnectionManagerTimeout(10000L);
		httpClient.setParams(params);
		try {
			httpClient.executeMethod(postMethod);
			//获取二进制的byte流
			byte[] b = postMethod.getResponseBody();
			String str = new String(b,"UTF-8");
			_log.debug("client:"+str);
		}catch (Exception e) {
			// TODO: handle exception
			System.out.println(e.getMessage()+","+e.getStackTrace());
		}finally{
			postMethod.releaseConnection();
		}
	}
	
}




Service 服务端
package httpjson;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONObject;

import org.apache.log4j.Logger;

/**
 * Servlet implementation class DemoHttpJson
 */
public class DemoHttpJson extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	private final static Logger _log = Logger.getLogger(HttpJsonUtil.class);
    /**
     * Default constructor. 
     */
    public DemoHttpJson() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		// TODO Auto-generated method stub
		this.doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		ServletInputStream servletInputStream = request.getInputStream();
		ByteArrayOutputStream  out = new ByteArrayOutputStream ();
		byte[] b = new byte[1024];
		int i = 0;
		// inputStream 转 byte
		while((i = servletInputStream.read(b,0,1024))>0){
			out.write(b,0,i);
		}
		
		byte[] req = out.toByteArray();
		
		String str = new String(req,"UTF-8");
		JSONObject reqJson = JSONObject.fromObject(str);
		JSONObject json = new JSONObject();
		json.put("VER","1.0");
		if(reqJson.get("username").equals("demo")){
			json.put("msg","true");
			_log.debug("登录成功");
		}else{
			json.put("msg","false");
			_log.debug("登录失败");
		}
		
		PrintWriter pw = response.getWriter();
		pw.write(json.toString());
	}

}


执行  public void login()
控制台日志
service log
[11/10/11 00:09:48] [DemoHttpJson-DEBUG 64] 登录失败


client log
[11/10/11 00:09:48] [ClientDemo-DEBUG 46] client:
{"VER":"1.0","msg":"false"}



Java源代码搜索引擎  值得学习 .http://grepcode.com/search?query=HttpClient&start=0&entity=type&n=



分享到:
评论

相关推荐

    HttpClient Post 二进制/字节流/byte[]实例代码

    在本文中,我们将深入探讨如何使用HttpClient进行POST请求,特别是发送二进制/字节流/byte[]数据。 ### HttpClient 3.x 实例 在HttpClient 3.x版本中,我们使用`HttpClient`类来创建一个HTTP客户端实例,然后通过`...

    HTTP二进制

    HTTP二进制是一种在网络通信中传输二进制数据的方式,特别是在HTTP协议中。HTTP(超文本传输协议)是互联网上应用最广泛的一种网络协议,它主要用于传输文本、图像、音频和视频等多种类型的数据,其中就包括二进制...

    C#版protobuf如何实现http方式二进制传输

    Protocol buffers是一种编码方法构造的一种有效而可扩展的格式的数据。 谷歌使用其内部几乎RPC协议和文件格式的所有协议缓冲区。 C#protobuf如何实现http方式二进制传输的一个例子及说明文档

    二进制图片的下载

    2. **内存到二进制图片**:相反,若要将图片保存回二进制流,我们可以使用`ImageIO.write(BufferedImage, String, OutputStream)`方法,将内存中的图像写入输出流,这里的字符串参数指定图像格式(如"jpg", "png")...

    HttpClient模拟客户端传输文件

    HttpClient模拟客户端传输文件是Java开发中的常见需求,尤其在与服务器进行交互时,例如上传用户数据、图片或者其他文件。在这个过程中,我们通常会使用POST请求将文件作为请求体发送到服务器。 首先,我们需要引入...

    httpClient 网络传输的实例

    本实例将深入讲解如何使用HttpClient进行网络传输。 一、HttpClient基本概念 HttpClient是一个实现了HTTP/1.0和HTTP/1.1协议的客户端编程工具包。它不仅支持基本的HTTP方法,还支持HTTPS、Cookie管理、连接池、...

    HttpClient4.3教程 PDF格式

    值得注意的是,在使用HttpClient时,它基于传统的阻塞IO模型来实现网络通信,这意味着在单个线程中,整个请求/响应过程是同步阻塞的。这对于简单的应用场景来说并无大碍,但在高并发的情况下可能会导致性能问题。 ...

    android HttpClient 获取网络图片

    android HttpClient 获取网络图片 实例

    通过HTTPClient获取网络资源

    本篇文章将深入探讨如何使用`HttpClient`来获取网络资源,以及处理返回的XML数据。 首先,我们需要了解`HttpClient`的基本用法。在Java中,创建一个`HttpClient`实例是获取网络资源的第一步。`HttpClient`提供了...

    C#图片上传下载,图片和二进制之间的转换

    6. **数据库优化**:为了提高性能,可以考虑使用数据库的二进制列类型如SQL Server的VARBINARY(MAX),或者存储过程来处理图片数据,以减少网络传输和数据库操作的开销。 7. **安全性**:在处理用户上传的图片时,...

    java 中HttpClient传输xml字符串实例详解

    至此,我们已经成功地使用Java的HttpClient库将一个对象转换为XML字符串,并以二进制流的方式发送到了服务器。这个过程中涉及的关键技术包括对象到XML的转换(JAXB)、流操作(ByteArrayOutputStream和...

    HttpClient发送post请求传输json数据

    在这个主题中,我们将专注于如何使用HttpClient发送POST请求并传输JSON数据。在实际的Web服务开发和API调用中,这是一个非常常见的需求。 首先,理解POST请求:与GET请求不同,POST请求通常用于向服务器发送数据,...

    httpClient组合包.zip

    关于"post请求"和"传输文件"的标签,HttpClient提供了一套完整的解决方案。在POST请求中,使用HttpPost对象来指定请求URL,然后可以通过HttpEntityEnclosingRequestBase类的setEntity()方法添加请求实体,这个实体...

    HttpClient网络获取图片

    从网络获取数据和图片,用gson解析并用listview展示

    对于C#(HttpClient)方式网络请求的封装

    标题中的“对于C#(HttpClient)方式网络请求的封装”是指使用C#编程语言,特别是通过HttpClient类来处理HTTP网络请求,并将这个过程进行抽象和封装,以便在多个地方重复使用。HttpClient是.NET Framework和.NET ...

    Java后端HttpClient Post提交文件流 及服务端接收文件流

    HttpClient Post提交多文件及多个普通参数,已经封装成工具类。 需传入 要请求的url 普通参数map 例 map.put("param1","张三"); 需要传入的文件流map 其中key为文件名 服务端接收无乱码。

    httpclient

    `commons-httpclient-3.0.jar`是Apache HttpClient 3.0版本的二进制库文件,包含了HttpClient的所有类和方法,开发者可以通过导入这个库来使用HttpClient的相关功能。而`HttpUtil.java`可能是一个自定义的Java类,...

    httpclient.jar包下载.zip

    在Java环境中,`httpclient.jar`是HttpClient库的二进制文件,通常通过Maven或Gradle等构建工具作为依赖引入项目。将`httpclient.jar`下载并添加到项目类路径中,即可使用HttpClient的功能。 总的来说,HttpClient...

Global site tag (gtag.js) - Google Analytics