生活随笔
收集整理的這篇文章主要介紹了
HttpClient基础教程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、HttpClient相關的重要資料
官方網站:http://hc.apache.org/
API:http://hc.apache.org/httpcomponents-client-4.3.x/httpclient/apidocs/index.html
tutorial:?http://hc.apache.org/httpcomponents-client-4.3.x/tutorial/html/index.html ?【PDF版本】http://hc.apache.org/httpcomponents-client-4.3.x/tutorial/pdf/httpclient-tutorial.pdf
2、HttpClient有2個版本
org.apache.http.impl.client.HttpClients 與?org.apache.commons.httpclient.HttpClient
目前后者已被廢棄,apache已不再支持。
一般而言,使用HttpClient均需導入httpclient.jar與httpclient-core.jar2個包。
3、使用HttpClient進行網絡處理的基本步驟
(1)通過get的方式獲取到Response對象。
[java]?view plaincopy
CloseableHttpClient?httpClient?=?HttpClients.createDefault();?? HttpGet?httpGet?=?new?HttpGet("http://www.baidu.com/");?? CloseableHttpResponse?response?=?httpClient.execute(httpGet);?? 注意,必需要加上http://的前綴,否則會報:Target host is null異常。
(2)獲取Response對象的Entity。
[java]?view plaincopy
HttpEntity?entity?=?response.getEntity();?? 注:HttpClient將Response的正文及Request的POST/PUT方法中的正文均封裝成一個HttpEntity對象。可以通過entity.getContenType(),entity.getContentLength()等方法獲取到正文的相關信息。但最重要的方法是通過getContent()獲取到InputStream對象。
(3)通過Entity獲取到InputStream對象,然后對返回內容進行處理。
[java]?view plaincopy
is?=?entity.getContent();?? sc?=?new?Scanner(is);?? ?? String?filename?=?"2.txt";?? os?=?new?PrintWriter(filename);?? while?(sc.hasNext())?{?? ????os.write(sc.nextLine());?? }?? 使用HtppClient下載一個網頁的完整代碼如下:
[java]?view plaincopy
package?com.ljh.test;?? ?? import?java.io.IOException;?? import?java.io.InputStream;?? import?java.io.PrintWriter;?? import?java.io.Writer;?? import?java.util.Scanner;?? ?? import?org.apache.http.HttpEntity;?? import?org.apache.http.HttpStatus;?? import?org.apache.http.client.ClientProtocolException;?? import?org.apache.http.client.methods.CloseableHttpResponse;?? import?org.apache.http.client.methods.HttpGet;?? import?org.apache.http.impl.client.CloseableHttpClient;?? import?org.apache.http.impl.client.HttpClients;?? ?? public?class?DownloadWebPage{?? ?? ????public?static?void?downloadPagebyGetMethod()?throws?IOException?{?? ?? ?????????? ????????CloseableHttpClient?httpClient?=?HttpClients.createDefault();?? ????????HttpGet?httpGet?=?new?HttpGet("http://www.baidu.com/");?? ????????CloseableHttpResponse?response?=?httpClient.execute(httpGet);?? ?? ????????InputStream?is?=?null;?? ????????Scanner?sc?=?null;?? ????????Writer?os?=?null;?? ????????if?(response.getStatusLine().getStatusCode()?==?HttpStatus.SC_OK)?{?? ????????????try?{?? ?????????????????? ????????????????HttpEntity?entity?=?response.getEntity();?? ?? ?????????????????? ????????????????is?=?entity.getContent();?? ????????????????sc?=?new?Scanner(is);?? ?????????????????? ????????????????String?filename?=?"2.txt";?? ????????????????os?=?new?PrintWriter(filename);?? ????????????????while?(sc.hasNext())?{?? ????????????????????os.write(sc.nextLine());?? ????????????????}?? ?? ????????????}?catch?(ClientProtocolException?e)?{?? ????????????????e.printStackTrace();?? ????????????}?finally?{?? ????????????????if?(sc?!=?null)?{?? ????????????????????sc.close();?? ????????????????}?? ????????????????if?(is?!=?null)?{?? ????????????????????is.close();?? ????????????????}?? ????????????????if?(os?!=?null)?{?? ????????????????????os.close();?? ????????????????}?? ????????????????if?(response?!=?null)?{?? ????????????????????response.close();?? ????????????????}?? ????????????}?? ????????}?? ?? ????}?? ?? ????public?static?void?main(String[]?args)?{?? ????????try?{?? ????????????downloadPagebyGetMethod();?? ????????}?catch?(IOException?e)?{?? ????????????e.printStackTrace();?? ????????}?? ????}?? ?? }?? 注意:直接將HttpGet改為HttpPost,返回的結果有誤,百度返回302狀態,即重定向,新浪返回拒絕訪問。懷疑大多網站均不允許POST方法直接訪問網站。
轉載于:https://www.cnblogs.com/eaglegeek/p/4557938.html
總結
以上是生活随笔為你收集整理的HttpClient基础教程的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。