作者ciphero (奶油焗蛋饺...:))
看板java
标题Re: [问题] httpClient无法取得网页html的问题
时间Mon Dec 3 23:41:45 2012
※ 引述《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
1F:推 No:Firefox的话,Firebug也有很方便的网路检视工具 12/04 00:45
2F:推 gmoz:HTTP Referer就是盗图时要特别注意的wwwww 12/04 16:24