您的位置:首页 > 理论基础 > 计算机网络

使用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;

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息