標籤:android blog class c code java
使用HttpClient進行網路處理的基本步驟如下:
1、通過get的方式擷取到Response對象。
CloseableHttpClient httpClient = HttpClients.createDefault();HttpGet httpGet = new HttpGet("http://www.baidu.com/");CloseableHttpResponse response = httpClient.execute(httpGet);
2、擷取Response對象的Entity。
HttpEntity entity = response.getEntity();
註:HttpClient將Response的本文及Request的POST/PUT方法中的本文均封裝成一個HttpEntity對象。可以通過entity.getContenType(),entity.getContentLength()等方法擷取到本文的相關資訊。但最重要的方法是通過getContent()擷取到InputStream對象。
3、通過Entity擷取到InputStream對象,然後對返回內容進行處理。
is = entity.getContent();sc = new Scanner(is);// String filename = path.substring(path.lastIndexOf(‘/‘)+1);String filename = "2.txt";os = new PrintWriter(filename);while (sc.hasNext()) {os.write(sc.nextLine());}
使用HtppClient下載一個網頁的完整代碼如下:
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 {// 1、通過HttpGet擷取到response對象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 {// 2、擷取response的entity。HttpEntity entity = response.getEntity();// 3、擷取到InputStream對象,並對內容進行處理is = entity.getContent();sc = new Scanner(is);// String filename = path.substring(path.lastIndexOf(‘/‘)+1);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方法直接存取網站。