Re: [問題] httpClient無法取得網頁html的問題

看板java作者 (奶油焗蛋餃...:))時間13年前 (2012/12/03 23:41), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串3/5 (看更多)
※ 引述《No (you stay there)》之銘言: : 不外乎幾個原因: : HTTP request headers 需偽裝成瀏覽器行為 : 或者說伺服器利用 HTTP request headers 做基本的過慮 : 我通常由這樣的順序測試: : Referer : Host : User-Agent : 以你的這個問題來說 : 補上Referer就好了 : Referer也是最常見的原因 : 至於工具.. : 我不知道你用哪套 : 不過 Google Chrome 的 Developer Tools 是你的好朋友 感謝 No 大的提醒,檢查了一下,真的是 Referer 設定的問題 我用過 firefox 的開發者工具列,以及它的一個外掛叫做tamper data的工具, 來偵測 submit 的變數+值以及header 不過也不是我沒有注意到 Referer 這個東西,而是try的過程中我打錯了(暈倒~= =") 現在改一下就跑的很順利~~ 修正後的正確版本如下: (新增的部份用藍色表示) /*--------------------------程式碼分隔線-------------------------------*/ import java.io.BufferedReader; import java.io.InputStreamReader; 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.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; public class Test { public static void main(String[] args) throws Exception { // 我要查詢的關鍵字 String searchStr = "復仇者聯盟"; // 表單 submit 時的 action 程式 (方法為 post) String searchUrl = "http://search.atmovies.com.tw/search/search.cfm"; DefaultHttpClient httpclient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(searchUrl); httpPost.setHeader("Referer", "http://www.atmovies.com.tw/home/"); // 設定submit時的各項參數 (type, search_term 都是表單元件的變數名稱) List <NameValuePair> nvps = new ArrayList <NameValuePair>(); nvps.add(new BasicNameValuePair("type", "all")); nvps.add(new BasicNameValuePair("search_term", searchStr)); nvps.add(new BasicNameValuePair("action", "home")); httpPost.setEntity(new UrlEncodedFormEntity(nvps, "utf-8")); HttpResponse response = httpclient.execute(httpPost); // 檢查一下有沒有回傳成功 if(response.getStatusLine().getStatusCode() != 200) System.out.println("Http response error!"); HttpEntity entity = response.getEntity(); BufferedReader in = new BufferedReader( new InputStreamReader(entity.getContent(), "utf-8")); // 把網頁的 HTML 印出來 String html = null; while ((html = in.readLine()) != null) System.out.println(html); } } /*--------------------------程式碼結束--------------------------*/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.37.116.27

12/04 00:45, , 1F
Firefox的話,Firebug也有很方便的網路檢視工具
12/04 00:45, 1F

12/04 16:24, , 2F
HTTP Referer就是盜圖時要特別注意的wwwww
12/04 16:24, 2F
文章代碼(AID): #1GlCWxN- (java)
討論串 (同標題文章)
文章代碼(AID): #1GlCWxN- (java)