`
sundful
  • 浏览: 1253424 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

 
阅读更多

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

 

1.SSL单向验证时

 

代码如下:

Java代码  收藏代码
  1. import  java.io.IOException;  
  2. import  java.util.HashMap;  
  3. import  java.util.Map;  
  4.   
  5. import  org.apache.commons.httpclient.HttpClient;  
  6. import  org.apache.commons.httpclient.HttpException;  
  7. import  org.apache.commons.httpclient.HttpStatus;  
  8. import  org.apache.commons.httpclient.NameValuePair;  
  9. import  org.apache.commons.httpclient.methods.PostMethod;  
  10. import  org.apache.commons.httpclient.params.HttpClientParams;  
  11. import  org.apache.commons.httpclient.params.HttpMethodParams;  
  12. import  org.apache.commons.logging.Log;  
  13. import  org.apache.commons.logging.LogFactory;  
  14.   
  15. public   class  ClientSendData {  
  16.     static  Log log = LogFactory.getLog(ClientSendData. class );  
  17.   
  18.     private  String Url;  
  19.   
  20.     // 初始化数据   
  21.     public  ClientSendData() {  
  22.         Url = "https://test.yihaodian.com:8443/ims/feedbackToPingAn_getData.action" ;  
  23.     }  
  24.   
  25.     public  String sendData(String data) {  
  26.         String receivedData = null ;  
  27.         try  {  
  28.   
  29.             Map<String, String> paramsData = new  HashMap<String, String>();  
  30.             paramsData.put("data" , data);  
  31.             receivedData = send(Url, paramsData);  
  32.         } catch  (Exception e) {  
  33.             e.printStackTrace();  
  34.         }  
  35.         return  receivedData;  
  36.     }  
  37.   
  38.     public   static  String send(String url, Map<String, String> paramsMap) {  
  39.         String result = null ;  
  40.         PostMethod postMethod = null ;  
  41.         HttpClient httpClient = new  HttpClient();  
  42.   
  43.         httpClient.getParams().setParameter(  
  44.                 HttpMethodParams.HTTP_CONTENT_CHARSET, "utf-8" );  
  45.         postMethod = new  PostMethod(url);  
  46.   
  47.         if  (paramsMap !=  null  && paramsMap.size() >  0 ) {  
  48.             NameValuePair[] datas = new  NameValuePair[paramsMap.size()];  
  49.             int  index =  0 ;  
  50.             for  (String key : paramsMap.keySet()) {  
  51.                 datas[index++] = new  NameValuePair(key, paramsMap.get(key));  
  52.             }  
  53.             postMethod.setRequestBody(datas);  
  54.   
  55.         }  
  56.   
  57.         HttpClientParams httparams = new  HttpClientParams();  
  58.         httparams.setSoTimeout(60000 );  
  59.         postMethod.setParams(httparams);  
  60.   
  61.         try  {  
  62.             int  statusCode = httpClient.executeMethod(postMethod);  
  63.             if  (statusCode == HttpStatus.SC_OK) {  
  64.                 result = postMethod.getResponseBodyAsString();  
  65.                 log.info("发送成功!" );  
  66.             } else  {  
  67.                 log.error(" http response status is "  + statusCode);  
  68.             }  
  69.   
  70.         } catch  (HttpException e) {  
  71.             log.error("error url="  + url, e);  
  72.         } catch  (IOException e) {  
  73.             log.error("error url="  + url, e);  
  74.         } finally  {  
  75.             if  (postMethod !=  null ) {  
  76.                 postMethod.releaseConnection();  
  77.             }  
  78.         }  
  79.   
  80.         return  result;  
  81.     }  
  82.   
  83.     public   static   void  main(String[] args) {  
  84.         ClientSendData t = new  ClientSendData();  
  85.         t.sendData("测试SSL单项连接,向服务端发送数据!" );  
  86.     }  
  87. }  
 

可能出现的异常

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双向认证,而客户端发送数据是按照服务器是单向认证时发送的,即没有将客户端证书信息一起发送给服务端。服务端验证客户端证书时,发现客户端没有证书,然后就断开了握手连接。

 

 

分享到:
评论

相关推荐

    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层,用于加密通信和验证...

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

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

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

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

    如何在WPF应用程序中通过HttpClient调用Web API

    它支持多种数据传输格式,如JSON和XML,与HttpClient配合使用,可以轻松地实现客户端和服务器之间的数据交换。 总结来说,WPF中的异步调用Web API通过HttpClient能确保应用程序的响应性和用户体验。通过正确配置和...

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

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

    httpclient http客户端

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

Global site tag (gtag.js) - Google Analytics