




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、HttpClient示例一、HttpClient簡介HttpClient 是 Apache Jakarta Common 下的子項目,用來提供高效的、最新的、功能豐富的支持 HTTP 協議的客戶端編程工具包,并且它支持 HTTP 協議最新的版本和建議。HttpClient 已經應用在很多的項目中,比如 Apache Jakarta 上很著名的另外兩個開源項目 Cactus 和 HTMLUnit 都使用了 HttpClient。現在HttpClient最新版本為 HttpClient 4.3.二、HttpClient特性基于標準,純凈的java語言.實現了Http1.0和Http1.1以可擴展的
2、面向對象的結構實現了Http全部的方法 (GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE).支持HTTPS協議.通過Http代理建立透明的連接.利用CONNECT 方法通過Http代理建立隧道的https連接.Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos 認證方案.插件式的自定義認證方案.便攜可靠的套接字工廠使它更容易的使用第三方解決方案.連接管理器支持多線程應用.支持設置最大連接數,同時支持設置每個主機的最大連接數.發現并關閉過期的連接.Automatic Coo
3、kie handling for reading Set-Cookie: headers from the server and sending them back out in a Cookie: header when appropriate.插件式的自定義Cookie策略.Request output streams to avoid buffering any content body by streaming directly to the socket to the server.Response input streams to efficiently read the resp
4、onse body by streaming directly from the socket to the server.在http1.0和http1.1中利用KeepAlive保持持久連接.直接獲取服務器發送的response code和 headers.設置連接超時的能力.實驗性的支持http1.1 response caching.源代碼基于Apache License 可免費獲取.三、詳細講解這里為了更好的理解,新建了一個java se的工程,如下圖所示 HttpClientTest類package com.yulore.httpproxy; import java.io.
5、File; import java.io.FileInputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.KeyManagementException; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.Unrec
6、overableKeyException; import java.security.cert.CertificateException; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.ParseException; import org.apache.http.client.
7、ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.ssl.SSLS
8、ocketFactory; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import org.junit.Test; public class HttpClientTest Test public void jUnitTest() get(); /* * HttpClient連接SSL */ private void ssl() DefaultHtt
9、pClient httpclient = new DefaultHttpClient(); try KeyStore trustStore = KeyStore.getInstance(KeyStore .getDefaultType(); FileInputStream instream = new FileInputStream(new File( "d:tomcat.keystore"); try / 加載keyStore d:tomcat.keystore trustStore.load(instream, "123456".toCharArra
10、y(); catch (CertificateException e) e.printStackTrace(); finally try instream.close(); catch (Exception ignore) / 穿件Socket工廠,將trustStore注入 SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore); / 創建Scheme Scheme sch = new Scheme("https", 8443, socketFactory); / 注冊Scheme httpcli
11、ent.getConnectionManager().getSchemeRegistry().register(sch); / 創建http請求(get方式) HttpGet httpget = new HttpGet( "https:/localhost:8443/myDemo/Ajax/serivceJ.action"); System.out.println("executing request" + httpget.getRequestLine(); HttpResponse response = httpclient.execute(httpg
12、et); HttpEntity entity = response.getEntity(); System.out.println("-"); System.out.println(response.getStatusLine(); if (entity != null) System.out.println("Response content length: " + entity.getContentLength(); String ss = EntityUtils.toString(entity); System.out.println(ss); E
13、ntityUtils.consume(entity); catch (ParseException e) e.printStackTrace(); catch (IOException e) e.printStackTrace(); catch (KeyManagementException e) e.printStackTrace(); catch (UnrecoverableKeyException e) e.printStackTrace(); catch (NoSuchAlgorithmException e) e.printStackTrace(); catch (KeyStoreE
14、xception e) e.printStackTrace(); finally httpclient.getConnectionManager().shutdown(); /* * post方式提交表單(模擬用戶登錄請求) */ private void postForm() / 創建默認的httpClient實例. HttpClient httpclient = new DefaultHttpClient(); / 創建httppost HttpPost httppost = new HttpPost( "http:/localhost:8080/myDemo/Ajax/seri
15、vceJ.action"); / 創建參數隊列 List<NameValuePair> formparams = new ArrayList<NameValuePair>(); formparams.add(new BasicNameValuePair("username", "admin"); formparams.add(new BasicNameValuePair("password", "123456"); UrlEncodedFormEntity uefEntity; t
16、ry uefEntity = new UrlEncodedFormEntity(formparams, "UTF-8"); httppost.setEntity(uefEntity); System.out.println("executing request " + httppost.getURI(); HttpResponse response; response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); if (entity != null)
17、System.out.println("-"); System.out.println("Response content: " + EntityUtils.toString(entity, "UTF-8"); System.out.println("-"); catch (ClientProtocolException e) e.printStackTrace(); catch (UnsupportedEncodingException e1) e1.printStackTrace(); catch (IOExc
18、eption e) e.printStackTrace(); finally / 關閉連接,釋放資源 httpclient.getConnectionManager().shutdown(); /* * 發送 post請求訪問本地應用并根據傳遞參數不同返回不同結果 */ private void post() / 創建默認的httpClient實例. HttpClient httpclient = new DefaultHttpClient(); / 創建httppost HttpPost httppost = new HttpPost( "http:/localhost:8080/
19、myDemo/Ajax/serivceJ.action"); / 創建參數隊列 List<NameValuePair> formparams = new ArrayList<NameValuePair>(); formparams.add(new BasicNameValuePair("type", "house"); UrlEncodedFormEntity uefEntity; try uefEntity = new UrlEncodedFormEntity(formparams, "UTF-8"
20、); httppost.setEntity(uefEntity); System.out.println("executing request " + httppost.getURI(); HttpResponse response; response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); if (entity != null) System.out.println("-"); System.out.println("Response
21、content: " + EntityUtils.toString(entity, "UTF-8"); System.out.println("-"); catch (ClientProtocolException e) e.printStackTrace(); catch (UnsupportedEncodingException e1) e1.printStackTrace(); catch (IOException e) e.printStackTrace(); finally / 關閉連接,釋放資源 httpclient.getConn
22、ectionManager().shutdown(); /* * 發送 get請求 */ private void get() HttpClient httpclient = new DefaultHttpClient(); try / 創建httpget. HttpGet httpget = new HttpGet(" System.out.println("executing request " + httpget.getURI(); / 執行get請求. HttpResponse response = httpclient.execute(httpget);
23、 / 獲取響應實體 HttpEntity entity = response.getEntity(); System.out.println("-"); / 打印響應狀態 System.out.println(response.getStatusLine(); if (entity != null) / 打印響應內容長度 System.out.println("Response content length: " + entity.getContentLength(); / 打印響應內容 System.out.println("Response
24、 content: " + EntityUtils.toString(entity); System.out.println("-"); catch (ClientProtocolException e) e.printStackTrace(); catch (ParseException e) e.printStackTrace(); catch (IOException e) e.printStackTrace(); finally / 關閉連接,釋放資源 httpclient.getConnectionManager().shutdown(); 詳細信息請看
25、程序中的注釋注意事項JUnit運行測試時報錯,錯誤日志信息如下:java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactoryat org.apache.http.impl.client.AbstractHttpClient.<init>(AbstractHttpClient.java:182)at org.apache.http.impl.client.DefaultHttpClient.<init>(DefaultHttpClient.java:150)at com.yulore.httpp
26、roxy.HttpClientTest.get(HttpClientTest.java:180)at com.yulore.httpproxy.HttpClientTest.jUnitTest(HttpClientTest.java:36)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccesso
27、rImpl.invoke(DelegatingMethodAccessorImpl.java:25)at java.lang.reflect.Method.invoke(Method.java:597)at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)at ernal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)at org.junit.runners.model
28、.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)at ernal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4Clas
29、sRunner.java:71)at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)at org.junit.runners.P
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國九針夾線座總成市場調查研究報告
- 2025年項目部安全管理人員安全培訓考試試題及答案4A
- 2025年中國不銹鋼絲編織網數據監測報告
- 2025項目部安全管理人員安全培訓考試試題標準卷
- 2025年中國PVC塑料灰板市場調查研究報告
- 健康保險行業與醫療健康產業的融合發展
- 急性敵敵畏中毒的護理查房
- 從傳統到現代區塊鏈技術在書法藝術保護中的應用研究
- 純銀板企業數字化轉型與智慧升級戰略研究報告
- 電焊條用線材企業縣域市場拓展與下沉戰略研究報告
- 寧夏低空經濟發展現狀與策略實施路徑探索
- 第十八屆“地球小博士”全國地理知識科普競賽題庫(附答案)
- MOOC 大學生創新與創業實踐-西南交通大學 中國大學慕課答案
- 送達地址確認書(訴訟類范本)
- 產品路標規劃-綜述2.1
- 2023年鄭州工業應用技術學院單招考試面試題庫及答案解析
- 《電子制造技術-電子封裝》配套教學課件
- 二月份循證護理查房課件
- 粉筆國考行測模考大賽第八季
- JJF(湘) 09-2018 純水-超純水系統監測儀表(電導率)計量校準規范-(高清現行)
- 延安市幼兒教師心理健康現狀調查分析
評論
0/150
提交評論