2010-05-29 126 views
0

我正在使用Apache HTTPClient for Java,而且我正面临一个非常奇怪的问题。有时当我尝试获取动态生成的页面时,它会返回其实际内容,但其他时间(使用另一个参数)我所得到的只是\ t,\ r和\ n的短序列。Apache HTTPClient返回空白页面

我怎么能跟踪不同情况下发生了什么,以找到错误在哪里?

我的图书馆的使用是非常简单的,我要做的就是一个初始化了HTTPClient对象上这几个电话:

String content = "/pageIwant.jsp?parameter=10101010"; 
HttpGet request = new HttpGet(content); 
HttpResponse response = client.execute(targetHost, request); 
HttpEntity entity = response.getEntity(); 
String page = EntityUtils.toString(entity); 
+0

你有过在另一端服务器控件? – 2010-05-29 20:32:15

+0

不幸的是我没有。我想要做的是从IEEE Explore获取信息。 当我收到关于在期刊上发表的论文的信息时,一切正常,但是当我尝试从会议中获取论文时什么都不起作用。 这是链接两个样本页面 会议论文 http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=671096 期刊论文 http://ieeexplore.ieee.org/xpls/abs_all .jsp?arnumber = 5456077 – mariosangiorgio 2010-05-29 20:50:48

+0

该网站似乎需要登录。这是考虑到了吗? – BalusC 2010-05-29 21:55:10

回答

3

我会处理这通过尝试获取使用同一个页面来启动方式网页浏览器。如果你无法做到这一点,那么可以肯定的是,真正的问题在于服务器。您需要与服务器的支持人员交谈。

如果浏览器正常,请尝试使用wget实用程序重复该过程。如果wget给您带来问题,请返回浏览器,确切了解浏览器在HTTP请求中发送了哪些标头,并尝试让wget使用相同的标头。一旦你有wget工作,记下头文件。

最后返回到您的Java代码并对其进行修改,以便它发送的HTTP请求标头与用于wget的HTTP请求标头相同。

是的,我必须使用我的大学代理进行身份验证,然后才能访问所有数据。代理验证对于'期刊页面'甚至是其他网站来说是完美无缺的,所以我不排除这个问题与此有关。

我想你可能排除了真正的问题。 @BalasC不是在谈论代理验证。而是他在IEEE网站上谈论认证。仅仅因为该网站的一部分似乎无需身份验证即可正常工作并不意味着这一切都会。 (但是,我认为该网站会以“FORBIDDEN”或“AUTHORIZATION REQUIRED”错误回复,而不是传递奇怪的内容。)

另一种可能性是,该网站试图阻止其“屏幕抓取”内容使用自动工具。查看网站的“服务条款”,看看您是否允许尝试做什么。 (您可以选择忽略ToS并规避技术措施,但是您可能会发现自己或您的组织的知识产权被封锁,或者您可能会停止对停止侵犯版权行为的封杀。)

+0

感谢您的回复,明天我会试一试,我会让你知道的 – mariosangiorgio 2010-05-30 19:58:58

+0

不幸的是,即使使用wget,我也有相同的输出结果,是否有人知道我如何获取数据? 通过浏览器,我可以看到所有页面 – mariosangiorgio 2010-05-31 22:42:23

+1

*“如果wget给你提供了问题,请返回浏览器,确切地找出浏览器在HTTP请求中发送的头文件,并尝试让wget使用相同的头文件“*你是否尝试过这样做?这是解决你的问题的关键。 – 2010-05-31 22:52:19

0

我找到了解决我的问题的方法,我错过了一些显然只是从动态页面的一部分需要的头信息。

为了解决我的问题,我首先使用wireshark查看浏览器和服务器之间的通信,然后添加了所有我丢失的标题。

我发现,在我来说,我需要指定“的Accept-Language”数据