客户端向服务器发送数据时,份两种情况,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如何在双向验证时发送数据的,恳请指教。
分享到:
相关推荐
本示例探讨的是如何使用HTTPClient库在客户端发送XML报文到服务器端,且报文通过POST方法传递,并可能涉及加密处理,确保数据的安全性。 首先,HTTPClient是Apache提供的一款强大的Java HTTP客户端API,它允许...
标题中的“使用httpClient访问https+443端口号”指的是使用Apache HttpClient库来发起HTTPS(安全超文本传输协议)请求,目标服务器的默认端口是443。HTTPS是一种基于SSL/TLS的安全通信协议,用于在客户端和服务器...
7. 现在HttpClient已经配置好,可以安全地发送请求到需要客户端认证的HTTPS接口。 请注意,虽然`TrustAllManager`方便测试,但在生产环境中应谨慎使用,因为它可能引入安全风险。在实际应用中,你应该根据服务器...
本篇文章将深入探讨客户端如何使用HTTPClient库向HTTPS服务器发送数据,同时也会涉及到HTTPS协议的相关概念和Java中实现HTTPS客户端的方法。 首先,我们来理解HTTPS(超文本传输安全协议)。HTTPS是在HTTP的基础上...
在实际项目中,我们经常需要使用HttpClient来发送POST请求,以便与服务器进行数据交换。但是,当我们需要使用HTTPS协议时,事情变得复杂起来。HTTPS协议需要SSL/TLS证书来确保数据的安全,而HttpClient需要忽略证书...
在这个场景中,我们关注的是如何使用HttpClient来发送POST请求并传输JSON数据。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于API接口的数据传递。 首先,我们需要引入Apache HttpClient...
在"网易贵金属"的例子中,你可能需要使用HttpClient发送GET请求到网易贵金属的页面,然后使用Jsoup解析返回的HTML,找到包含贵金属价格、新闻等信息的部分,从而实现数据抓取。实际操作时,可能还需要考虑登录、分页...
HTTPClient是Java编程语言中广泛使用的HTTP客户端库,主要用于与HTTP服务器进行通信。这个压缩包文件包含三个重要的组件,它们是: 1. **httpclient-4.3.3.jar**:这是Apache HttpClient库的主要实现,版本4.3.3。...
在本文中,我们将深入探讨如何使用Ionic、Angular和Express框架构建一个完整的前后端交互系统,特别是在客户端使用HttpClient发送GET请求获取数据并在页面上显示。这是一个常见的应用场景,对于开发跨平台移动应用...
`HttpClient`是Apache提供的一款强大的HTTP客户端库,可以用于实现向服务器发送HTTP请求并接收响应。本篇将详细讲解如何使用`HttpClient`进行异步请求数据,并结合Android的`AsyncTask`来处理后台任务,避免阻塞UI...
1. HttpClient使用:创建HttpClient实例,配置请求参数,然后通过execute方法发送请求,获取响应。它可以方便地处理各种复杂的HTTP请求场景。 2. 请求与响应处理:HttpClient允许开发者精细控制请求头、请求体、...
- **发送数据**:Android客户端通常通过HTTP请求(如GET、POST、PUT、DELETE)向服务器发送JSON数据。可以使用HttpURLConnection或OkHttp库来实现。POST请求时,JSON数据通常作为请求体发送;GET请求则将数据附加到...
在IT行业中,网络通信是不可或缺的一部分,而HttpClient作为Java领域常用的HTTP客户端库,为我们提供了方便地与Web服务器交互的能力。本篇文章将详细讲解如何利用HttpClient上传文件到测试服务器,这在进行API测试、...
3. 设置请求体:如果需要发送数据,可以使用`StringEntity`或者`HttpEntityEnclosingRequestBase`的子类来封装数据。例如,若数据是JSON格式,可以这样设置:`StringEntity entity = new StringEntity(jsonContent, ...
此外,HttpClient还具有处理HTTPS协议的能力,可以处理SSL/TLS加密,确保数据在传输过程中的安全性。 在HTTPS实战中,首先我们需要理解HTTPS的基本原理。HTTPS是在HTTP基础上加入了SSL/TLS层,用于加密通信和验证...
使用`HttpClient`的`execute`方法发送请求,并捕获`HttpResponse`对象来接收服务器的响应: ```java HttpResponse httpResponse = httpClient.execute(httpGet); ``` ## 6. 解析响应内容 从`HttpResponse`对象中,...
- 使用`NameValuePair`或`HttpEntity`发送表单数据或JSON数据。 - 使用`RedirectStrategy`控制重定向行为。 - 使用`AuthenticationStrategy`进行身份验证。 - 使用`PoolingHttpClientConnectionManager`管理连接池。...
这些接口通常会向服务器发送Ajax请求,获取动态内容后更新到页面上。通过分析这些请求,开发者可以找到数据接口,并使用HttpClient来模拟这些请求,获取到动态加载的数据。 在本例中,我们通过Jsoup获取到了京东...
Java中使用HttpClient进行HTTPS接口调用的方法是通过继承DefaultHttpClient类,忽略证书校验过程。首先,创建一个SSLClient类,继承DefaultHttpClient类,并在构造函数中初始化SSLContext和TrustManager。然后,使用...
在Java中,使用HTTPClient库与HTTPS服务器通信时,我们不仅需要发送HTTP请求,还需要处理SSL/TLS的握手过程。 HTTPClient库是由Apache提供的一款高效、功能丰富的HTTP客户端API。在Java中,我们通常使用HttpClient ...