HttpClient几种实现方式

1.使用java原生HttpURLConnection访问web服务。
public class RTBClient {
	private String url = <a target=_blank href="http://localhost">http://localhost</a>;
	private String port = "8080";
	private String path = "/RTBServer/RTBServer";
	public RTBClient() {}
	public Result[] get(DspContext dc) {
		if (null == dc ) {
			return null;
		}
		URL url = null;
		HttpURLConnection urlConn = null;
		try {
			url = new URL(this.url + ":" + this.port + this.path);
			urlConn = (HttpURLConnection) url.openConnection();
			urlConn.setDoOutput(true);
			urlConn.setDoInput(true);
			urlConn.setUseCaches(false);
			urlConn.setRequestProperty("Content-type",
					"application/x-java-serialized-object");
			urlConn.setRequestMethod("POST");
			urlConn.connect();
		} catch (MalformedURLException e1) {
			e1.printStackTrace();
		} catch (ProtocolException e1) {
			e1.printStackTrace();
		} catch (IOException e1) {
			e1.printStackTrace();
		}

		try {
			OutputStream  outStrm = urlConn.getOutputStream();
			ObjectOutputStream oos = new ObjectOutputStream(outStrm);
			oos.writeObject(dc);
			oos.flush();
			oos.close();
		} catch (IOException e1) {
			e1.printStackTrace();
		}

		Result[] result;
		try {
			InputStream inStrm = urlConn.getInputStream();
			ObjectInputStream ois = new ObjectInputStream(inStrm);
			result = (Result[]) (ois.readObject());
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (EOFException e) {
			e.printStackTrace();
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		urlConn.disconnect();
		return null;
	}
}

2.使用Apache的HttpClient包访问web服务。

public class RtbClient {
	private String address = null;
	private int connReqTimeout = 5000;
	private int connTimeout = 5000;
	private int soTimeout = 5000;
	private int maxConn = 100;
	private HttpClient httpClient = null;
	PoolingHttpClientConnectionManager connManager = null;

	public RtbClient(String address, int connReqTimeout, int connTimeout, int soTimeout, int maxConn) {
		this.address = address;
		this.connReqTimeout = connReqTimeout;
		this.connTimeout = connTimeout;
		this.soTimeout = soTimeout;
		this.maxConn = maxConn;
		RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(this.connTimeout)
				.setConnectionRequestTimeout(this.connReqTimeout)
				.setSocketTimeout(this.soTimeout).build();
		this.connManager = new PoolingHttpClientConnectionManager();
		this.connManager.setMaxTotal(this.maxConn);
		this.httpClient = HttpClientBuilder.create()
				.setConnectionManager(this.connManager).setDefaultRequestConfig(requestConfig).build();
	}

	public void sendReq(String str) {
		HttpPost post = new HttpPost(address);
                  HttpEntity entity = new StringEntity(str);
                  post.setEntity(entity);					
	         HttpResponse response;
		try {
			response = this.httpClient.execute(post);
			if (null != response) {
				System.out.println(response.getStatusLine().getStatusCode());
			}
		} catch (HttpHostConnectException e) {
			logger.error("client can not connect server!", e);
			e.printStackTrace();
		} catch (Exception e) {
			logger.error("rtb client get method invoke exception!", e);
			e.printStackTrace();
		}

		return;
	}

}
时间: 2024-10-05 03:04:35

HttpClient几种实现方式的相关文章

android httpClient 支持HTTPS的2种处理方式

摘自: http://www.kankanews.com/ICkengine/archives/9634.shtml 项目中Android https或http请求地址重定向为HTTPS的地址,相信很多人都遇到了这个异常(无终端认证): javax.net.ssl.SSLPeerUnverifiedException: No peer certificate 1.没遇到过的问题,搜索吧,少年 log里出现这个异常,作者第一次遇到,不知道啥意思.看下字面意思,是ssl协议中没有终端认证.SSL?作

Android学习之XML数据的三种解析方式以及生成XML文件

首先,我得声明,本博客的思想主要参考了此博客:http://blog.csdn.net/liuhe688/article/details/6415593 不过代码我自己一句句敲的 好了,首先讲一下解析XML的三种方式:(恕我粘贴一下哈) SAX解析器: SAX(Simple API for XML)解析器是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的.当事件源产生事件后,调用事件处理器相应的处理方法,一个事件就可以得到处理.在事件源调用事件处理器中特定方

Struts2系列笔记(3)---Action类的3种书写方式

Action类的3种书写方式 本文主要写有关写Action类的3种书写方式: (1)第一种 Action可以是POJO (简单模型对象)  不需要继承任何父类 也不需要实现任何接口 (2)实现Action接口 (3)继承ActionSupport(推荐) 那我们先来书写第一种: (1)第一种 Action可以是POJO (简单模型对象)  不需要继承任何父类 也不需要实现任何接口 1 //这里其实就是一个普通的类,类里面的方法可以任意写,如果写execute()方法那就代表默认执行它 2 pub

[数据库事务与锁]详解八:底理解数据库事务乐观锁的一种实现方式——CAS

注明: 本文转载自http://www.hollischuang.com/archives/1537 在深入理解乐观锁与悲观锁一文中我们介绍过锁.本文在这篇文章的基础上,深入分析一下乐观锁的实现机制,介绍什么是CAS.CAS的应用以及CAS存在的问题等. 线程安全 众所周知,Java是多线程的.但是,Java对多线程的支持其实是一把双刃剑.一旦涉及到多个线程操作共享资源的情况时,处理不好就可能产生线程安全问题.线程安全性可能是非常复杂的,在没有充足的同步的情况下,多个线程中的操作执行顺序是不可预

利用图形窗口分割法将极坐标方程:r=cos(θ/3)+1/9用四种绘图方式画在不同的窗口中

利用图形窗口分割法将极坐标方程:r=cos(θ/3)+1/9用四种绘图方式画在不同的窗口中. 解:MATLAB指令: theta=0:0.1:6*pi;rho=cos(theta/3)+1/9; >> polar(theta,rho) >> >> plot(theta,rho) >> semilogx(theta,rho) >> grid >> hist(rho,15) 结果分别如下图: 图1 图2 图3 图4

linux ssh 的几种验证方式

介绍 本文说的SSH指的是OPENSSH这个开源软件,通过OPENSSH官网可发现,它在服务器上的使用率已经非常高了.运维人员.开发人员每天都在用它,但很多人对他的工作原理和认证方式不是很了解. 正文 SSH的认证方式可以概括有4种. 1 PAM认证 在配置文件/etc/ssh/sshd_config中对应参数: UsePAM 2 公钥私钥认证 在配置文件/etc/ssh/sshd_config中对应参数: RSAAuthentication.PubkeyAuthentication 我们在配置

Python模块常用的几种安装方式

一.方法1: 单文件模块直接把文件拷贝到 $python_dir/Lib 二.方法2: 多文件模块,带setup.py 下载模块包,进行解压,进入模块文件夹,执行:python setup.py install 三. 方法3:easy_install 方式  先下载ez_setup.py,运行python ez_setup 进行easy_install工具的安装,之后就可以使用easy_install进行安装package了.  easy_install  packageName  easy_i

sort_contours_xld算子的几种排序方式研究

sort_contours_xld算子有5种排序方式,即: 'upper_left': The position is determined by the upper left corner of the surrounding rectangle. 'upper_right':The position is determined by the upper right corner of the surrounding rectangle. 'lower_left':The position i

PlaceHolder的两种实现方式

placeholder属性是HTML5 中为input添加的.在input上提供一个占位符,文字形式展示输入字段预期值的提示信息(hint),该字段会在输入为空时显示. 如 1 <input type="text" name="loginName" placeholder="邮箱/手机号/QQ号"> 目前浏览器的支持情况 浏览器 IE6/7/8/9 IE10+ Firefox Chrome Safari  是否支持 NO YES YE