使用apache的HTTPclient访问restfulAPI
2016-06-07 15:51
471 查看
1.服务器上对外提供了restful风格的api运行正常(可安装google的postman插件进行浏览器端的测试:http://jingyan.baidu.com/article/90808022ff18defd91c80f9a.html 或者使用restclient-ui-3.4.2-jar-with-dependencies.jar(网盘中有)进行测试)
2.确定测试项目中使用org.apache.httpcomponents的httpclient的jar包(4以上版本)
3.接受任意证书(测试时适用)(http://www.cnblogs.com/shipengzhi/archive/2012/08/22/2650953.html)
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package hand.test.restfultest;
import java.io.IOException;
import java.nio.charset.Charset;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import javax.security.cert.CertificateException;
import javax.security.cert.X509Certificate;
import org.apache.http.client.HttpClient;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.util.EntityUtils;
import org.junit.Test;
/**
*
* @author JP
*/
public class TestRestByCommonHttp {
@Test
public void testGetDeployRest() {
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet getRequest = new HttpGet(
// "https://localhost:9443/bpmn/repository/deployments"
"https://10.213.0.162:9443/bpmn/repository/deployments"
);
httpClient= (DefaultHttpClient)WebClientDevWrapper.wrapClient(httpClient);
getRequest.addHeader("Content-type", "application/json");
//设置身份认证
String auth = "admin" + ":" + "admin";
String authorizationHeaderValue = java.util.Base64.getEncoder().encodeToString(auth.getBytes(Charset.forName("US-ASCII")));
getRequest.addHeader("Authorization", "Basic " + authorizationHeaderValue);
//请求
HttpResponse response = httpClient.execute(getRequest);
int sta = response.getStatusLine().getStatusCode();//状态码
String bodyStr = EntityUtils.toString(response.getEntity());//body
if (response.getStatusLine().getStatusCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatusLine().getStatusCode());
}
System.out.println("hand.test.restfultest.TestRestByCommonHttp.testGetDeployRest()====" + sta);
System.out.println("result="+bodyStr);
} catch (IOException ex) {
Logger.getLogger(TestRestByCommonHttp.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* 避免HttpClient的”SSLPeerUnverifiedException: peer not authenticated”异常
* 不用导入SSL证书
*
* @author shipengzhi(shipengzhi@sogou-inc.com)
*
*/
public static class WebClientDevWrapper {
public static org.apache.http.client.HttpClient wrapClient(HttpClient base) {
try {
SSLContext ctx = SSLContext.getInstance("TLS");
X509TrustManager tm = new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
}
@Override
public void checkClientTrusted(
java.security.cert.X509Certificate[] chain,
String authType)
throws java.security.cert.CertificateException {
// TODO Auto-generated method stub
}
@Override
public void checkServerTrusted(
java.security.cert.X509Certificate[] chain,
String authType)
throws java.security.cert.CertificateException {
// TODO Auto-generated method stub
}
};
ctx.init(null, new TrustManager[]{tm}, null);
SSLSocketFactory ssf = new SSLSocketFactory(ctx, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("https", 443, ssf));
ThreadSafeClientConnManager mgr = new ThreadSafeClientConnManager(registry);
return new DefaultHttpClient(mgr, base.getParams());
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
}
}
2.确定测试项目中使用org.apache.httpcomponents的httpclient的jar包(4以上版本)
3.接受任意证书(测试时适用)(http://www.cnblogs.com/shipengzhi/archive/2012/08/22/2650953.html)
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package hand.test.restfultest;
import java.io.IOException;
import java.nio.charset.Charset;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import javax.security.cert.CertificateException;
import javax.security.cert.X509Certificate;
import org.apache.http.client.HttpClient;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.util.EntityUtils;
import org.junit.Test;
/**
*
* @author JP
*/
public class TestRestByCommonHttp {
@Test
public void testGetDeployRest() {
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet getRequest = new HttpGet(
// "https://localhost:9443/bpmn/repository/deployments"
"https://10.213.0.162:9443/bpmn/repository/deployments"
);
httpClient= (DefaultHttpClient)WebClientDevWrapper.wrapClient(httpClient);
getRequest.addHeader("Content-type", "application/json");
//设置身份认证
String auth = "admin" + ":" + "admin";
String authorizationHeaderValue = java.util.Base64.getEncoder().encodeToString(auth.getBytes(Charset.forName("US-ASCII")));
getRequest.addHeader("Authorization", "Basic " + authorizationHeaderValue);
//请求
HttpResponse response = httpClient.execute(getRequest);
int sta = response.getStatusLine().getStatusCode();//状态码
String bodyStr = EntityUtils.toString(response.getEntity());//body
if (response.getStatusLine().getStatusCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatusLine().getStatusCode());
}
System.out.println("hand.test.restfultest.TestRestByCommonHttp.testGetDeployRest()====" + sta);
System.out.println("result="+bodyStr);
} catch (IOException ex) {
Logger.getLogger(TestRestByCommonHttp.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* 避免HttpClient的”SSLPeerUnverifiedException: peer not authenticated”异常
* 不用导入SSL证书
*
* @author shipengzhi(shipengzhi@sogou-inc.com)
*
*/
public static class WebClientDevWrapper {
public static org.apache.http.client.HttpClient wrapClient(HttpClient base) {
try {
SSLContext ctx = SSLContext.getInstance("TLS");
X509TrustManager tm = new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
}
@Override
public void checkClientTrusted(
java.security.cert.X509Certificate[] chain,
String authType)
throws java.security.cert.CertificateException {
// TODO Auto-generated method stub
}
@Override
public void checkServerTrusted(
java.security.cert.X509Certificate[] chain,
String authType)
throws java.security.cert.CertificateException {
// TODO Auto-generated method stub
}
};
ctx.init(null, new TrustManager[]{tm}, null);
SSLSocketFactory ssf = new SSLSocketFactory(ctx, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("https", 443, ssf));
ThreadSafeClientConnManager mgr = new ThreadSafeClientConnManager(registry);
return new DefaultHttpClient(mgr, base.getParams());
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
}
}
相关文章推荐
- Apache Isis 1.4.0 发布,领域驱动开发框架
- RH436 Day3 课后总结
- Linux快速构建apache web服务器
- Awstats处理多apache日志
- 安装perl模块小窍门
- Apache静态编译与动态编译的区别
- PHP+Apache在Windows 9x下的安装和配置
- Apache服务器配置全攻略
- Apache Web让JSP“动”起来
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- apache 环境下 php 的配置注意事项
- 在RedHat下安装apache jserv 1.1.2方法
- windows8.1下Apache+Php+MySQL配置步骤
- windows中PHP5.2.14以及apache2.2.16安装配置方法第1/2页
- 在Windows XP下安装Apache+MySQL+PHP环境
- 解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
- apache rewrite防盗链三例
- ASP.NET MVC Web API HttpClient简介
- Apache 配置详解(最好的APACHE配置教程)