打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
apache的HttpComponents项目的介绍和简单使用

1、HttpComponents项目的介绍


先介绍一下一个开源项目, 这个项目就是Apache开源组织中的HttpComponents,主要是提供对http服务器的访问功能,目前已经是一个单独的项目,可见http服务器的访问绝非易事。



    在某些时候可能需要通过程序来访问这别人的网页程序,比如从别人的网页中“偷”一些数据。如果对方仅仅是一个很简单的页面,那我们的程序会很简单,。但是考虑到一些服务授权的问 题,很多公司提供的页面往往并不是可以通过一个简单的URL就可以访问的,而必须经过注册然后登录后方可使用提供服务的页面,这个时候就涉及到 COOKIE问题的处理。我们知道目前流行的动态网页技术例如ASP、JSP无不是通过COOKIE来处理会话信息的。为了使我们的程序能使用别人所提供的服务页面,就要求程序首先登录后再访问服务页面!再比如通过HTTP来上传文件呢?


    HttpComponents项目就是专门设计来简化HTTP客户端与服务器进行各种通讯编程。通过它可以让原来很头疼的事情现在轻松的解决,例如你不再管是HTTP或者HTTPS的通讯方式,告诉它你想使用HTTPS方式,剩下的事情交给 httpclient替你完成。

   网址:http://www.apache.org/   主页下面的Projects 可以找到HttpComponents项目,下载到相应的jar包,以及源代码跟示例程序。


2、httpcomponents 4.5.2 简单使用


HttpComponents 也就是以前的httpclient项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端/服务器编程工具包,并且它支持 HTTP 协议最新的版本和建议。不过现在的 HttpComponents 包含多个子项目,有:

HttpComponents Core
HttpComponents Client

HttpComponents AsyncClient

Commons HttpClient

以下列出的是 HttpClient 提供的主要的功能,要知道更多详细的功能可以参见 HttpClient 的主页。

实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
支持自动转向
支持 HTTPS 协议
支持代理服务器等
支持Cookie

之前用的HttpClient的方法都失效了,比如 httpclinet =new DefaultHttpClient(); 不知道为啥包里80%的类都失效了,总是觉得创建一个httpclient实例会比较麻烦,记不住。所以整理了一下新的方式简单使用。 
简单使用


导入jar包

<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version></dependency>

get请求获取响应

CloseableHttpClient httpClient= HttpClients.createDefault();HttpGet httpget = new HttpGet('http://www.baidu.com');CloseableHttpResponse response = httpClient.execute(httpget);HttpEntity httpEntity= response.getEntity();String strResult= EntityUtils.toString(httpEntity);
post请求获取响应

HttpPost httpost = new HttpPost('https://www.baidu.com');List <NameValuePair> nvps = new ArrayList <NameValuePair>();nvps.add(new BasicNameValuePair('IDToken1', 'username'));nvps.add(new BasicNameValuePair('IDToken2', 'password'));httpost.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8));

HttpClient提供URIBuilder工具类来简化URIs的创建和修改过程。

URI uri = new URIBuilder() .setScheme('http') .setHost('www.google.com') .setPath('/search') .setParameter('q', 'httpclient') .setParameter('btnG', 'Google Search') .setParameter('aq', 'f') .setParameter('oq', '') .build(); HttpGet httpget = new HttpGet(uri); System.out.println(httpget.getURI())
模拟浏览器请求
httpget.setHeader('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0');

3、HttpComponents之httpclient基本使用方法 - httpclient的版本是4.3

 A、第一种方式

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.config.RequestConfig;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicNameValuePair;import org.apache.http.util.EntityUtils; import java.io.IOException;import java.util.ArrayList;import java.util.List; public class HttpClient2 { public static void main(String args[]) throws IOException { List<NameValuePair> formparams = new ArrayList<NameValuePair>(); formparams.add(new BasicNameValuePair('account', '')); formparams.add(new BasicNameValuePair('password', '')); HttpEntity reqEntity = new UrlEncodedFormEntity(formparams, 'utf-8'); RequestConfig requestConfig = RequestConfig.custom() .setSocketTimeout(5000) .setConnectTimeout(5000) .setConnectionRequestTimeout(5000) .build(); HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost('http://cnivi.com.cn/login'); post.setEntity(reqEntity); post.setConfig(requestConfig); HttpResponse response = client.execute(post); if (response.getStatusLine().getStatusCode() == 200) { HttpEntity resEntity = response.getEntity(); String message = EntityUtils.toString(resEntity, 'utf-8'); System.out.println(message); } else { System.out.println('请求失败'); } }}

B、第二种方式,这种方式是用了一个http的连接池,同时使用httpbuilder构造合适的http方法。
import org.apache.http.HttpEntity;import org.apache.http.HttpHost;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.client.HttpClient;import org.apache.http.client.config.RequestConfig;import org.apache.http.client.methods.HttpUriRequest;import org.apache.http.client.methods.RequestBuilder;import org.apache.http.conn.routing.HttpRoute;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClientBuilder;import org.apache.http.impl.client.HttpClients;import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;import org.apache.http.message.BasicNameValuePair;import org.apache.http.util.EntityUtils; import java.io.IOException;import java.util.*; public class HttpClientUtils { private static PoolingHttpClientConnectionManager connectionManager = null; private static HttpClientBuilder httpBulder = null; private static RequestConfig requestConfig = null; private static int MAXCONNECTION = 10; private static int DEFAULTMAXCONNECTION = 5; private static String IP = 'cnivi.com.cn'; private static int PORT = 80; static { //设置http的状态参数 requestConfig = RequestConfig.custom() .setSocketTimeout(5000) .setConnectTimeout(5000) .setConnectionRequestTimeout(5000) .build(); HttpHost target = new HttpHost(IP, PORT); connectionManager = new PoolingHttpClientConnectionManager(); connectionManager.setMaxTotal(MAXCONNECTION); connectionManager.setDefaultMaxPerRoute(DEFAULTMAXCONNECTION); connectionManager.setMaxPerRoute(new HttpRoute(target), 20); httpBulder = HttpClients.custom(); httpBulder.setConnectionManager(connectionManager); } public static CloseableHttpClient getConnection() { CloseableHttpClient httpClient = httpBulder.build(); httpClient = httpBulder.build(); return httpClient; } public static HttpUriRequest getRequestMethod(Map<String, String> map, String url, String method) { List<NameValuePair> params = new ArrayList<NameValuePair>(); Set<Map.Entry<String, String>> entrySet = map.entrySet(); for (Map.Entry<String, String> e : entrySet) { String name = e.getKey(); String value = e.getValue(); NameValuePair pair = new BasicNameValuePair(name, value); params.add(pair); } HttpUriRequest reqMethod = null; if ('post'.equals(method)) { reqMethod = RequestBuilder.post().setUri(url) .addParameters(params.toArray(new BasicNameValuePair[params.size()])) .setConfig(requestConfig).build(); } else if ('get'.equals(method)) { reqMethod = RequestBuilder.get().setUri(url) .addParameters(params.toArray(new BasicNameValuePair[params.size()])) .setConfig(requestConfig).build(); } return reqMethod; } public static void main(String args[]) throws IOException { Map<String, String> map = new HashMap<String, String>(); map.put('account', ''); map.put('password', ''); HttpClient client = getConnection(); HttpUriRequest post = getRequestMethod(map, 'http://cnivi.com.cn/login', 'post'); HttpResponse response = client.execute(post); if (response.getStatusLine().getStatusCode() == 200) { HttpEntity entity = response.getEntity(); String message = EntityUtils.toString(entity, 'utf-8'); System.out.println(message); } else { System.out.println('请求失败'); } }}

=============END=============
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
spring集成httpclient连接池配置
HTTP
SpringMVC实战(五)
httpclient
[原]Java模拟新浪和腾迅自动登录并发送微博(2013年3月更新可用) | IT瘾
HttpClient-aaaaa
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服