`
liulanghan110
  • 浏览: 1062064 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

客户端如何使用httpclient向https服务器发送数据

    博客分类:
  • JAVA
阅读更多

客户端向服务器发送数据时,份两种情况,SSL单向验证和SSL双向验证

 

1.SSL单向验证时

 

代码如下:

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpClientParams;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class ClientSendData {
	static Log log = LogFactory.getLog(ClientSendData.class);

	private String Url;

	// 初始化数据
	public ClientSendData() {
		Url = "https://test.yihaodian.com:8443/ims/feedbackToPingAn_getData.action";
	}

	public String sendData(String data) {
		String receivedData = null;
		try {

			Map<String, String> paramsData = new HashMap<String, String>();
			paramsData.put("data", data);
			receivedData = send(Url, paramsData);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return receivedData;
	}

	public static String send(String url, Map<String, String> paramsMap) {
		String result = null;
		PostMethod postMethod = null;
		HttpClient httpClient = new HttpClient();

		httpClient.getParams().setParameter(
				HttpMethodParams.HTTP_CONTENT_CHARSET, "utf-8");
		postMethod = new PostMethod(url);

		if (paramsMap != null && paramsMap.size() > 0) {
			NameValuePair[] datas = new NameValuePair[paramsMap.size()];
			int index = 0;
			for (String key : paramsMap.keySet()) {
				datas[index++] = new NameValuePair(key, paramsMap.get(key));
			}
			postMethod.setRequestBody(datas);

		}

		HttpClientParams httparams = new HttpClientParams();
		httparams.setSoTimeout(60000);
		postMethod.setParams(httparams);

		try {
			int statusCode = httpClient.executeMethod(postMethod);
			if (statusCode == HttpStatus.SC_OK) {
				result = postMethod.getResponseBodyAsString();
				log.info("发送成功!");
			} else {
				log.error(" http response status is " + statusCode);
			}

		} catch (HttpException e) {
			log.error("error url=" + url, e);
		} catch (IOException e) {
			log.error("error url=" + url, e);
		} finally {
			if (postMethod != null) {
				postMethod.releaseConnection();
			}
		}

		return result;
	}

	public static void main(String[] args) {
		ClientSendData t = new ClientSendData();
		t.sendData("测试SSL单项连接,向服务端发送数据!");
	}
}
 

可能出现的异常

1.java.net.ConnectException: Connection refused: connect

 

服务器没有启动

 

2 .javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed

 

服务端的证书是不可信的。解决办法见这篇文章 http://zhuyuehua.iteye.com/blog/1102347

 

3.java.net.SocketException: Software caused connection abort: recv failed

 

这是由于服务端配置的是SSL双向认证,而客户端发送数据是按照服务器是单向认证时发送的,即没有将客户端证书信息一起发送给服务端。

 

4.org.apache.commons.httpclient.NoHttpResponseException

 

这一般是服务端防火墙的原因。拦截了客户端请求。

 

另外,当服务端负载过重时,也会出现此问题。

 

5.javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake

 

这是由于服务端配置的是SSL双向认证,而客户端发送数据是按照服务器是单向认证时发送的,即没有将客户端证书信息一起发送给服务端。服务端验证客户端证书时,发现客户端没有证书,然后就断开了握手连接。

 

2.SSL双向验证时

 

双向验证时,暂时不知道如何用HTTPCLIENT发送数据,如需要双向验证时发送数据,参考我另外的文章。另外,有知道HTTPCLIENT如何在双向验证时发送数据的,恳请指教。

0
2
分享到:
评论
2 楼 BelloVersion 2017-11-07  
第五种错误
Remote host closed connection during handshake
怎么解决啊?楼主
1 楼 luxury_zh 2014-01-21  
呵呵,一号店的啊,看来是前同事了

相关推荐

    Client-https-server.rar_httpclient服务器_https_https client_https c

    客户端如何使用httpclient向https服务器发送数据

    httpclient 客户端发送xml报文到服务器端采用post方式(加密)传递

    采用httpclient发送xml报文,httpServer接收报文。两个程序一看就明白可以直接调用执行不在多说。

    教务管理系统 android 客户端和 web服务器

    掌握使用HttpClient发送请求、使用HttpClient获取服务器响应; 掌握将服务器响应装换为JSON对象或数组、通过Android客户端加载服务器响应; 开发java web project作为服务端; 开发Android客户端; 采用HttpClient...

    封装一个类搞定90%安卓客户端与服务器端交互

    1.与服务器端交互json数据. 2.Get方式与服务器端交互数据. 3.Post方式与服务器端交互数据. 4.HttpClient方式与服务器端交互数据. 5.上传文件到服务器端. 6.从服务器端下载文件. 7.从服务器端读取文本文件.

    C#中在WebClient中使用post发送数据实现方法

    主要介绍了C#中在WebClient中使用post发送数据实现方法,需要的朋友可以参考下

    黑马安卓基础day4 (总共day8)

    38_视频客户端综合案例&获取数据.avi 39_视频客户端综合案例&界面的显示.avi 40_通过get方式提交数据到服务器.avi 41_采用post方式提交数据到服务器.avi 42_采用httpclient发送get请求.avi 43_采用httpclient发送...

    基于HttpClient的Android远程数据库访问

    摘要:虽然Android有SQLite的支持,但由于手机的硬件条件限制,很多数据库并没有直接运行在客户端...直接访问采用JDBC连接技术,但其安全性较低,间接方法主要通过客户端向服务器发送请求,进而采用数据传输的方式进行

    STM32F4+LWIP+HTTP client(TCP client) +DHCP +DNS

    1.在stm32使用lwip协议栈实现http client,完成向客户端定时发送数据 2.实现DNS域名解析操作 3.实现通过DHCP获取DNS服务器地址,可以通过此地址进行域名解析 4.使用MDK5.20编译

    通信与网络中的基于HttpClient的Android远程数据库访问

    摘要:虽然Android有SQLite的支持,但由于手机的硬件条件限制,很多数据库并没有直接运行在客户端...直接访问采用JDBC连接技术,但其安全性较低,间接方法主要通过客户端向服务器发送请求,进而采用数据传输的方式进行

    豆瓣客户端

    主要技术:httpclient模拟浏览器发送请求;异步加载图片资源,采用软引用将图片资源缓存在内存中;获取的数据量大的情况下采用分批加载数据;优化用户体验,在3G情况下不加载图片;保证程序不异常终止,并将错误信息...

    kairosdb-client:KairosDB的Java客户端

    KairosDB客户端 KairosDB客户端是一个Java库,使发送度量标准和查询KairosDB服务器变得简单。 HttpClient类用于推送指标或查询KairosDB服务器。 该库使用构建器模式简化了创建客户端使用的JSON的任务。 如果发生错误...

    Android使用http协议与服务器通信的实例

    首先,需要明确一下http通信流程,Android目前提供两种http通信方式,HttpURLConnection和HttpClient,HttpURLConnection多用于发送或接收流式数据,因此比较适合上传/下载文件,HttpClient相对来讲更大更全能,但是...

    传智播客Android视频教程-课程源码.rar

    使用HttpClient开源项目提交参数给服务器 4&gt; 网络--通过HTTP协议实现文件上传 第五天 1&gt; 网络--通过HTTP协议发送XML数据,并调用webservice实现手机号归属地查询 2&gt; 网络--通过HTTP协议实现多线程断点续传下载 3&gt; ...

    java jdk实列宝典 光盘源代码

    基本socket编程,介绍socket编程的基本步骤,启动socket服务器后,在打开socket的客户端,在输入框里输入消息发送到服务器,服务器受到消息后返回给客户端; Http服务器,httpsever.java; 一个支持多线程的服务器...

    黎活明android教程的全程PPT

    使用HttpClient开源项目提交参数给服务器 4&gt; 网络--通过HTTP协议实现文件上传 第五天 1&gt; 网络--通过HTTP协议发送XML数据,并调用webservice实现手机号归属地查询 2&gt; 网络--通过HTTP协议实现多线程断点续传下载 3...

    JAVA上百实例源码以及开源项目源代码

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    BPT-Tracker:此应用程序有助于定义您的生物黄金时间,这是一天中您精力充沛,因此具有最大潜力进行生产的时间

    Angular 11 Client使用HTTPClient发送HTTP请求并检索HTTP响应,然后使用组件上的数据。 路由器用于在页面之间导航。 Node.js Express Server使用MySQL客户端导出REST API并与MySQL数据库进行交互。开发服务器客户在...

    JAVA上百实例源码以及开源项目

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    疯狂Android讲义源码

     13.3.2 使用Apache HttpClient 501  13.4 使用WebView视图  显示网页 505  13.4.1 使用WebView浏览网页 506  13.4.2 使用WebView加载HTML  代码 507  13.5 使用Web Service进行  网络编程 508  13.5.1 Web...

Global site tag (gtag.js) - Google Analytics