Re: [問題] httpClient無法取得網頁html的問題
※ 引述《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
12/04 00:45, 1F
推
12/04 16:24, , 2F
12/04 16:24, 2F
討論串 (同標題文章)