`
baoliangquan
  • 浏览: 8283 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

https处理方式--HttpClient

阅读更多
目前,要为另一个项目提供接口,接口是用HTTP URL实现的,最初的想法是另一个项目用JQuery post进行请求。

但是,很可能另一个项目是部署在别的机器上,那么就存在跨域问题,而JQuery的post请求是不允许跨域的。

这时,就只能够用HttpClient包进行请求了,同时由于请求的URL是HTTPS的,为了避免需要证书,所以用一个类继承DefaultHttpClient类,忽略校验过程。
1.写一个SSLClient类,继承至HttpClient
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.http.conn.ClientConnectionManager;
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.client.DefaultHttpClient;
//用于进行Https请求的HttpClient
public class SSLClient extends DefaultHttpClient{
	public SSLClient() throws Exception{
        super();
        SSLContext ctx = SSLContext.getInstance("TLS");
        X509TrustManager tm = new X509TrustManager() {
                @Override
                public void checkClientTrusted(X509Certificate[] chain,
                        String authType) throws CertificateException {
                }
                @Override
                public void checkServerTrusted(X509Certificate[] chain,
                        String authType) throws CertificateException {
                }
                @Override
                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
        };
        ctx.init(null, new TrustManager[]{tm}, null);
        SSLSocketFactory ssf = new SSLSocketFactory(ctx,SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
        ClientConnectionManager ccm = this.getConnectionManager();
        SchemeRegistry sr = ccm.getSchemeRegistry();
        sr.register(new Scheme("https", 443, ssf));
    }
}



2.写一个利用HttpClient发送post请求的类
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
/*
 * 利用HttpClient进行post请求的工具类
 */
public class HttpClientUtil {
	public String doPost(String url,Map<String,String> map,String charset){
		HttpClient httpClient = null;
		HttpPost httpPost = null;
		String result = null;
		try{
			httpClient = new SSLClient();
			httpPost = new HttpPost(url);
			//设置参数
			List<NameValuePair> list = new ArrayList<NameValuePair>();
			Iterator iterator = map.entrySet().iterator();
			while(iterator.hasNext()){
				Entry<String,String> elem = (Entry<String, String>) iterator.next();
				list.add(new BasicNameValuePair(elem.getKey(),elem.getValue()));
			}
			if(list.size() > 0){
				UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list,charset);
				httpPost.setEntity(entity);
			}
			HttpResponse response = httpClient.execute(httpPost);
			if(response != null){
				HttpEntity resEntity = response.getEntity();
				if(resEntity != null){
					result = EntityUtils.toString(resEntity,charset);
				}
			}
		}catch(Exception ex){
			ex.printStackTrace();
		}
		return result;
	}
}

3.调用post请求的测试代码
import java.util.HashMap;
import java.util.Map;
//对接口进行测试
public class TestMain {
	private String url = "https://192.168.1.101/";
	private String charset = "utf-8";
	private HttpClientUtil httpClientUtil = null;
	
	public TestMain(){
		httpClientUtil = new HttpClientUtil();
	}
	
	public void test(){
		String httpOrgCreateTest = url + "httpOrg/create";
		Map<String,String> createMap = new HashMap<String,String>();
		createMap.put("authuser","*****");
		createMap.put("authpass","*****");
		createMap.put("orgkey","****");
		createMap.put("orgname","****");
		String httpOrgCreateTestRtn = httpClientUtil.doPost(httpOrgCreateTest,createMap,charset);
		System.out.println("result:"+httpOrgCreateTestRtn);
	}
	
	public static void main(String[] args){
		TestMain main = new TestMain();
		main.test();
	}
}

httpClient4.2的jar包下载路径:http://download.csdn.net/detail/hqmryang/4582440#comment
分享到:
评论

相关推荐

    commons-httpclient.rar

    3. **请求和响应处理**:HttpClient可以设置请求头、参数、编码方式等,并能解析HTTP响应,包括状态码、响应头和响应体内容。 4. **Cookie管理**:支持自动处理服务器返回的Cookie,方便进行会话管理。 5. **HTTP...

    commons-httpclient-3.1jar

    对于POST请求,HttpClient支持多种数据提交方式,如表单数据、MultipartEntity(适用于文件上传)等。 8. **线程安全**: HttpClient 3.1 在正确配置和使用下,可以保证在多线程环境中的安全性。 9. **异步请求*...

    httpclient-4.5.3.zip

    - **请求和响应处理**:HttpClient提供了`HttpRequestExecutor`和`HttpResponseHandler`接口,用于定制请求执行逻辑和响应处理方式。 - **身份验证与安全**:HttpClient支持多种认证机制,如Basic Auth、Digest ...

    httpclient-4.3.1.jar,httpcore-4.3.2.jar,httpmime-4.3.5.jar

    首先,我们来看`httpclient-4.3.1.jar`。这是Apache HttpClient的核心库,提供了一个灵活且高度可配置的HTTP客户端实现。它支持多种HTTP协议特性,如基本认证、代理设置、重定向处理、连接管理、请求和响应的解析等...

    httpclient-4.5所需jar包

    1. **httpclient-4.5.jar**:这是HTTPClient的核心库,包含了执行HTTP请求、管理连接、处理响应的基本类和接口。它支持HTTP/1.1协议,并且可以处理各种HTTP方法、头信息、编码、重定向等。 2. **httpcore-4.x.jar**...

    httpclient-4.5.3中文版文档,很实用

    在使用HttpClient时,开发者需要注意配置连接管理器、设置合适的超时、处理重定向和重试、以及选择合适的认证方式。同时,由于HttpClient的灵活性,正确地关闭和管理连接资源也非常重要,以避免资源泄露。 总之,...

    commons--httpclient.jar

    HttpClient提供了丰富的API,允许开发者构建复杂的HTTP请求,包括GET、POST、PUT、DELETE等各种HTTP方法,并支持基本认证、HTTPS、Cookie管理、重定向处理等功能。此外,它还支持自定义请求头、实体编码、多部分上传...

    httpclient-4.5所需jar包,里面包含httpclient-4.5.jar等等必须的开发包

    1. `httpclient-4.5.jar`:这是HTTPClient的核心库,包含了执行HTTP请求、处理响应、管理连接池等功能的类和接口。 2. `httpcore-4.4.1.jar`:这是HTTP Core库,提供了HTTP协议的基本操作,包括请求和响应模型,...

    httpclient4.5 jar包

    HttpClient支持多种安全协议,如SSL/TLS,可以配置证书和密钥管理器,实现HTTPS通信。同时,通过`CredentialsProvider`和`Authenticator`,可以处理HTTP基本认证和其他复杂认证需求。 6. **与其他技术的集成** ...

    httpclient-4.5.5 完整架包

    此外,对于HTTPS请求,需要配置SSL上下文,并可能需要处理证书和密钥。 总的来说,HttpClient 4.5.5是一个强大且功能全面的HTTP客户端工具,适用于需要高效、可靠地处理HTTP通信的Java应用程序。它提供了丰富的API...

    ApacheCommons-HTTPClient组件的应用.doc

    1. 主要系统库文件:commons-httpclient-3.1.jar,可以从Apache官方网站获取。 2. 其他依赖库文件:commons-codec-1.3.jar,因为HttpClient依赖Apache Commons Codec库,用于编码解码操作。如果没有此库,运行时会...

    httpclient-tutorial-simplified-chinese

    ### HttpClient教程概览 #### 一、基础知识 **1.1 执行请求** - **HTTP 请求**:HTTP 请求包括请求行、请求头和可能的消息体。请求行包含方法(如GET、POST)、请求URI和HTTP版本。请求头包含了客户端希望服务器...

    httpclient-4.5.3 api 中文版

    8. **SSL/TLS支持**:HttpClient 可以处理HTTPS连接,通过`SSLContext`和`SSLSocketFactory`可以自定义SSL/TLS配置,包括信任管理器和密钥库。 9. **响应处理**:HttpClient 提供了多种方式处理响应实体,如`...

    Apache httpclient源码4.5.12

    在学习HttpClient源码时,你可以深入理解HTTP协议的工作方式,了解如何使用Java进行网络编程,以及如何设计可扩展和高效的库。源码中的注释和设计模式也会帮助你提升Java编程技巧。 总的来说,Apache HttpClient ...

    httpclient-4.5jar包

    HttpClient 4.5还支持HTTPS,提供了SSL/TLS安全连接的处理。 二、HttpClient 4.5新特性 1. 引入了HttpAsyncClient,用于异步HTTP操作,提高了性能和响应速度。 2. 连接管理器升级,提供了更智能的连接池管理,可以...

    commons-httpclient.zip

    Commons HttpClient 是一个 Java 平台上的 HTTP 客户端库,它允许开发者通过编程方式执行 HTTP 请求,并处理响应。这个库在早期的 Java 开发中非常流行,特别是在需要与 Web 服务器进行复杂交互或者实现自动化测试时...

    commons-httpclient-3.0.1

    在压缩包中,除了`commons-httpclient-3.0.1.jar`主库外,还包括了其他几个依赖库: - `httpclient-4.5.13.jar`:这是一个更新版本的HttpClient库,可能被包含在项目中以支持更现代的HTTP特性和改进。 - `...

    commons-httpclient-3.1.rar

    总的来说,`commons-httpclient-3.1.rar`这个压缩包提供了一种高效、灵活的HTTP通信方式,通过HttpClient和HttpMethod,开发者可以轻松地模拟浏览器行为,执行各种HTTP请求。尽管现代的网络开发可能更多地转向了...

    httpclient-4.3.5

    2. HTTPS支持:HttpClient可以配置SSLContext,支持HTTPS连接,同时可以处理自签名证书和特定的TrustManager。 3. 缓存机制:HttpClient支持HTTP缓存规范,可以减少网络I/O,提高性能。 4. 高级特性:如自动处理...

    httpclient-4.5所需jar包.rar

    这个"HTTPClient-4.5所需jar包.rar"压缩文件包含了使用HTTPClient库进行网络通信所需的Java档案(JAR)文件。HTTPClient 4.5版本是一个稳定且广泛使用的版本,它支持HTTP/1.1和部分HTTP/2协议,适用于各种网络应用...

Global site tag (gtag.js) - Google Analytics