`
liulanghan110
  • 浏览: 1076498 次
  • 性别: 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  
呵呵,一号店的啊,看来是前同事了

相关推荐

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

    本示例探讨的是如何使用HTTPClient库在客户端发送XML报文到服务器端,且报文通过POST方法传递,并可能涉及加密处理,确保数据的安全性。 首先,HTTPClient是Apache提供的一款强大的Java HTTP客户端API,它允许...

    使用httpClient访问https+443端口号。

    标题中的“使用httpClient访问https+443端口号”指的是使用Apache HttpClient库来发起HTTPS(安全超文本传输协议)请求,目标服务器的默认端口是443。HTTPS是一种基于SSL/TLS的安全通信协议,用于在客户端和服务器...

    httpclient访问需要客户端认证数字证书的https接口的处理方法

    7. 现在HttpClient已经配置好,可以安全地发送请求到需要客户端认证的HTTPS接口。 请注意,虽然`TrustAllManager`方便测试,但在生产环境中应谨慎使用,因为它可能引入安全风险。在实际应用中,你应该根据服务器...

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

    本篇文章将深入探讨客户端如何使用HTTPClient库向HTTPS服务器发送数据,同时也会涉及到HTTPS协议的相关概念和Java中实现HTTPS客户端的方法。 首先,我们来理解HTTPS(超文本传输安全协议)。HTTPS是在HTTP的基础上...

    (完整版)JAVA利用HttpClient进行POST请求(HTTPS).doc

    在实际项目中,我们经常需要使用HttpClient来发送POST请求,以便与服务器进行数据交换。但是,当我们需要使用HTTPS协议时,事情变得复杂起来。HTTPS协议需要SSL/TLS证书来确保数据的安全,而HttpClient需要忽略证书...

    HttpClient发送post请求传输json数据

    在这个场景中,我们关注的是如何使用HttpClient来发送POST请求并传输JSON数据。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于API接口的数据传递。 首先,我们需要引入Apache HttpClient...

    httpClient+jsoup 抓取网页数据

    在"网易贵金属"的例子中,你可能需要使用HttpClient发送GET请求到网易贵金属的页面,然后使用Jsoup解析返回的HTML,找到包含贵金属价格、新闻等信息的部分,从而实现数据抓取。实际操作时,可能还需要考虑登录、分页...

    httpclient客户端jar.rar

    HTTPClient是Java编程语言中广泛使用的HTTP客户端库,主要用于与HTTP服务器进行通信。这个压缩包文件包含三个重要的组件,它们是: 1. **httpclient-4.3.3.jar**:这是Apache HttpClient库的主要实现,版本4.3.3。...

    Ionic+Angular+Express实现前后端交互使用HttpClient发送get请求数据并加载显示示例代码.zip

    在本文中,我们将深入探讨如何使用Ionic、Angular和Express框架构建一个完整的前后端交互系统,特别是在客户端使用HttpClient发送GET请求获取数据并在页面上显示。这是一个常见的应用场景,对于开发跨平台移动应用...

    使用HttpClient异步请求数据

    `HttpClient`是Apache提供的一款强大的HTTP客户端库,可以用于实现向服务器发送HTTP请求并接收响应。本篇将详细讲解如何使用`HttpClient`进行异步请求数据,并结合Android的`AsyncTask`来处理后台任务,避免阻塞UI...

    HttpServer.zip_http servlet server_httpclient_http服务器_java https

    1. HttpClient使用:创建HttpClient实例,配置请求参数,然后通过execute方法发送请求,获取响应。它可以方便地处理各种复杂的HTTP请求场景。 2. 请求与响应处理:HttpClient允许开发者精细控制请求头、请求体、...

    Android客户端与服务器端的json数据交互(内含大量知识点)

    - **发送数据**:Android客户端通常通过HTTP请求(如GET、POST、PUT、DELETE)向服务器发送JSON数据。可以使用HttpURLConnection或OkHttp库来实现。POST请求时,JSON数据通常作为请求体发送;GET请求则将数据附加到...

    四、使用HttpClient上传测试文件服务器

    在IT行业中,网络通信是不可或缺的一部分,而HttpClient作为Java领域常用的HTTP客户端库,为我们提供了方便地与Web服务器交互的能力。本篇文章将详细讲解如何利用HttpClient上传文件到测试服务器,这在进行API测试、...

    httpclient发送post请求

    3. 设置请求体:如果需要发送数据,可以使用`StringEntity`或者`HttpEntityEnclosingRequestBase`的子类来封装数据。例如,若数据是JSON格式,可以这样设置:`StringEntity entity = new StringEntity(jsonContent, ...

    HttpClient Https实战

    此外,HttpClient还具有处理HTTPS协议的能力,可以处理SSL/TLS加密,确保数据在传输过程中的安全性。 在HTTPS实战中,首先我们需要理解HTTPS的基本原理。HTTPS是在HTTP基础上加入了SSL/TLS层,用于加密通信和验证...

    Http(get)请求数据Android Studio使用HttpClient

    使用`HttpClient`的`execute`方法发送请求,并捕获`HttpResponse`对象来接收服务器的响应: ```java HttpResponse httpResponse = httpClient.execute(httpGet); ``` ## 6. 解析响应内容 从`HttpResponse`对象中,...

    httpclient http客户端

    - 使用`NameValuePair`或`HttpEntity`发送表单数据或JSON数据。 - 使用`RedirectStrategy`控制重定向行为。 - 使用`AuthenticationStrategy`进行身份验证。 - 使用`PoolingHttpClientConnectionManager`管理连接池。...

    Java爬虫Jsoup+httpclient获取动态生成的数据

    这些接口通常会向服务器发送Ajax请求,获取动态内容后更新到页面上。通过分析这些请求,开发者可以找到数据接口,并使用HttpClient来模拟这些请求,获取到动态加载的数据。 在本例中,我们通过Jsoup获取到了京东...

    JAVA利用HttpClient进行HTTPS接口调用的方法

    Java中使用HttpClient进行HTTPS接口调用的方法是通过继承DefaultHttpClient类,忽略证书校验过程。首先,创建一个SSLClient类,继承DefaultHttpClient类,并在构造函数中初始化SSLContext和TrustManager。然后,使用...

    给予javaWeb-httpclient请求https实例demo

    在Java中,使用HTTPClient库与HTTPS服务器通信时,我们不仅需要发送HTTP请求,还需要处理SSL/TLS的握手过程。 HTTPClient库是由Apache提供的一款高效、功能丰富的HTTP客户端API。在Java中,我们通常使用HttpClient ...

Global site tag (gtag.js) - Google Analytics