日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

apache的HttpComponents項(xiàng)目的介紹和簡單使用

 Levy_X 2017-12-19

1、HttpComponents項(xiàng)目的介紹


先介紹一下一個開源項(xiàng)目, 這個項(xiàng)目就是Apache開源組織中的HttpComponents,主要是提供對http服務(wù)器的訪問功能,目前已經(jīng)是一個單獨(dú)的項(xiàng)目,可見http服務(wù)器的訪問絕非易事。



    在某些時候可能需要通過程序來訪問這別人的網(wǎng)頁程序,比如從別人的網(wǎng)頁中“偷”一些數(shù)據(jù)。如果對方僅僅是一個很簡單的頁面,那我們的程序會很簡單,。但是考慮到一些服務(wù)授權(quán)的問 題,很多公司提供的頁面往往并不是可以通過一個簡單的URL就可以訪問的,而必須經(jīng)過注冊然后登錄后方可使用提供服務(wù)的頁面,這個時候就涉及到 COOKIE問題的處理。我們知道目前流行的動態(tài)網(wǎng)頁技術(shù)例如ASP、JSP無不是通過COOKIE來處理會話信息的。為了使我們的程序能使用別人所提供的服務(wù)頁面,就要求程序首先登錄后再訪問服務(wù)頁面!再比如通過HTTP來上傳文件呢?


    HttpComponents項(xiàng)目就是專門設(shè)計(jì)來簡化HTTP客戶端與服務(wù)器進(jìn)行各種通訊編程。通過它可以讓原來很頭疼的事情現(xiàn)在輕松的解決,例如你不再管是HTTP或者HTTPS的通訊方式,告訴它你想使用HTTPS方式,剩下的事情交給 httpclient替你完成。

   網(wǎng)址:http://www./   主頁下面的Projects 可以找到HttpComponents項(xiàng)目,下載到相應(yīng)的jar包,以及源代碼跟示例程序。


2、httpcomponents 4.5.2 簡單使用


HttpComponents 也就是以前的httpclient項(xiàng)目,可以用來提供高效的、最新的、功能豐富的支持 HTTP 協(xié)議的客戶端/服務(wù)器編程工具包,并且它支持 HTTP 協(xié)議最新的版本和建議。不過現(xiàn)在的 HttpComponents 包含多個子項(xiàng)目,有:

HttpComponents Core
HttpComponents Client

HttpComponents AsyncClient

Commons HttpClient

以下列出的是 HttpClient 提供的主要的功能,要知道更多詳細(xì)的功能可以參見 HttpClient 的主頁。

實(shí)現(xiàn)了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
支持自動轉(zhuǎn)向
支持 HTTPS 協(xié)議
支持代理服務(wù)器等
支持Cookie

之前用的HttpClient的方法都失效了,比如 httpclinet =new DefaultHttpClient(); 不知道為啥包里80%的類都失效了,總是覺得創(chuàng)建一個httpclient實(shí)例會比較麻煩,記不住。所以整理了一下新的方式簡單使用。 
簡單使用


導(dǎo)入jar包

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

get請求獲取響應(yīng)

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請求獲取響應(yīng)

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的創(chuàng)建和修改過程。

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:///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構(gòu)造合適的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 = ''; private static int PORT = 80; static { //設(shè)置http的狀態(tài)參數(shù) 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:///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=============

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約