利用Jakarta.Commons.HttpClient抓取網頁、網站(Parser)
HttpClient 已推出 4.x 版,若您要使用最新的版本請看:
Apache HttpClient 4.x 使用 GET, POST 範例
在撰寫程式的時候有時會我們需要取回網路上的資料做處理
或者是要以程式模擬Client端發出request
這時候我們就可以使用Jakarta.Commons.HttpClient來完成
Jakarta.Commons.HttpClient使用到下列的函式庫
Apache Commons HttpClient 3.x、Apache Commons Codec及Apache Commons Logging
三者必須在使用前就都設好classpath否則在執行時會出錯
依[Jakarta Commons] HttpClient模擬Client端發出request的介紹
Jakarta.Commons.HttpClient 能支援許多功能,例如:
實作所有的 HTTP methods (GET, POST, PUT, DELETE,HEAD, OPTIONS, and TRACE)
支援 HTTPS 的協定
支援 proxies 的各種情況
支援認證機制
自動的 cookie 處理模式 .....等等
更多介紹可連回[Jakarta Commons] HttpClient模擬Client端發出request查看
以下有幾個比較完整的 Get 和 Post的範例程式連結:
Get範例:
[Jakarta Commons] HttpClient模擬Client端發出request
JSP精選實用範例(五):抓取網頁
Post範例:
Re:TinyUrl using Jakarta HttpClient [Re:qrtt1]
更多原始的範例可以在HttpClient Examples看到
最後附上我自己改來用的程式碼
可能要看過上面的範例之後比較知道在做什麼
參考資料:
1. Jakarta.Commons.HttpClient、HttpClient Examples
2. [Jakarta Commons] HttpClient模擬Client端發出request
3. JSP精選實用範例(五):抓取網頁
4. Re:TinyUrl using Jakarta HttpClient [Re:qrtt1]
Apache HttpClient 4.x 使用 GET, POST 範例
在撰寫程式的時候有時會我們需要取回網路上的資料做處理
或者是要以程式模擬Client端發出request
這時候我們就可以使用Jakarta.Commons.HttpClient來完成
Jakarta.Commons.HttpClient使用到下列的函式庫
Apache Commons HttpClient 3.x、Apache Commons Codec及Apache Commons Logging
三者必須在使用前就都設好classpath否則在執行時會出錯
依[Jakarta Commons] HttpClient模擬Client端發出request的介紹
Jakarta.Commons.HttpClient 能支援許多功能,例如:
實作所有的 HTTP methods (GET, POST, PUT, DELETE,HEAD, OPTIONS, and TRACE)
支援 HTTPS 的協定
支援 proxies 的各種情況
支援認證機制
自動的 cookie 處理模式 .....等等
更多介紹可連回[Jakarta Commons] HttpClient模擬Client端發出request查看
以下有幾個比較完整的 Get 和 Post的範例程式連結:
Get範例:
[Jakarta Commons] HttpClient模擬Client端發出request
JSP精選實用範例(五):抓取網頁
Post範例:
Re:TinyUrl using Jakarta HttpClient [Re:qrtt1]
更多原始的範例可以在HttpClient Examples看到
最後附上我自己改來用的程式碼
可能要看過上面的範例之後比較知道在做什麼
關鍵字:HttpClient, executeMethod, getResponseBodyAsString
- import org.apache.commons.httpclient.HttpClient;
- import org.apache.commons.httpclient.HttpMethod;
- import org.apache.commons.httpclient.NameValuePair;
- import org.apache.commons.httpclient.methods.GetMethod;
- import org.apache.commons.httpclient.methods.PostMethod;
- public class ParseWeb extends HttpClient {
- public static void main(String[] args) {
- ParseWeb pw = new ParseWeb();
- // executeGet Example
- System.out.println(pw.execute(pw.setGet("http://www.google.com.tw/")));
- // executePost Example
- NameValuePair[] pairArray = {new NameValuePair("searchtype", "t"),
- new NameValuePair("searchscope", "keyword"),
- new NameValuePair("searcharg", "哈利波特"),
- new NameValuePair("SORT", "D")
- };
- System.out.println(pw.execute(
- pw.setPost("http://tulips.ntu.edu.tw:1081/search*cht/a?", pairArray)));
- }
- public ParseWeb() {
- this.getParams().setParameter("http.protocol.content-charset", "UTF-8");
- }
- public ParseWeb(String pageEncoding) {
- this.getParams().setParameter("http.protocol.content-charset", pageEncoding);
- }
- private GetMethod setGet(String url) {
- GetMethod method = new GetMethod(url);
- return method;
- }
- private PostMethod setPost(String url, NameValuePair[] pairArray) {
- PostMethod method = new PostMethod(url);
- for (NameValuePair pair : pairArray) {
- method.addParameter(pair);
- }
- return method;
- }
- private String execute(HttpMethod method) {
- try {
- this.executeMethod(method);
- String responseString = new String(method.getResponseBodyAsString());
- method.releaseConnection();
- return responseString;
- } catch (Exception e) {
- e.printStackTrace();
- method.releaseConnection();
- return "Error: executePost() fails";
- }
- }
- }
參考資料:
1. Jakarta.Commons.HttpClient、HttpClient Examples
2. [Jakarta Commons] HttpClient模擬Client端發出request
3. JSP精選實用範例(五):抓取網頁
4. Re:TinyUrl using Jakarta HttpClient [Re:qrtt1]
留言
張貼留言