Java ApacheHttpClient返回一个空页面

Java ApacheHttpClient返回一个空页面,java,httpclient,Java,Httpclient,我正在使用ApacheHttpClient for Java,我面临一个非常奇怪的问题。有时,当我尝试获取动态生成的页面时,它会返回其实际内容,但其他时候(使用另一个参数),我得到的只是\t、\r和\n的短序列 我如何跟踪不同案例中发生的情况,以便找到错误所在 我对该库的使用非常简单,我所做的只是对初始化的HTTPClient对象进行几次调用: String content = "/pageIwant.jsp?parameter=10101010"; HttpGet request = new

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

我如何跟踪不同案例中发生的情况,以便找到错误所在

我对该库的使用非常简单,我所做的只是对初始化的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);

我的方法是首先尝试使用web浏览器获取相同的页面。如果您不能让它工作,那么可以得出结论,真正的问题在于服务器。您需要与服务器的支持人员交谈

如果浏览器正常工作,请尝试使用
wget
实用程序重复此过程。如果
wget
给您带来问题,请返回您的浏览器,找出浏览器在HTTP请求中发送的确切标题,并尝试获取
wget
以使用相同的标题。一旦你有了
wget
工作,记下标题

最后返回Java代码,并对其进行修改,使其发送的HTTP请求头与用于
wget
的HTTP请求头相同


是的,我必须使用我所在大学的代理进行身份验证,然后才能访问所有数据。代理身份验证在“日志页面”甚至其他网站上都能完美地工作,因此我排除了与此相关的问题

我想你可能已经排除了真正的问题@BalasC并不是在谈论代理身份验证。相反,他说的是IEEE站点的身份验证。仅仅因为网站的一部分似乎在没有身份验证的情况下工作并不意味着它会全部工作。(然而,我原以为该网站会以“禁止”或“需要授权”的错误回应,而不是提供奇怪的内容。)


另一种可能性是,该网站试图使用自动工具防止“屏幕抓取”其内容。检查网站的“服务条款”,看看你尝试做的事情是否被允许。(您可以选择忽略ToS并规避技术措施,但随后您可能会发现自己或您的组织IP被阻止,或者您可能正处于停止和停止谈论侵犯版权的信件的末尾。)

我将尝试使用web浏览器获取同一页面,以此作为开始。如果您不能让它工作,那么可以得出结论,真正的问题在于服务器。您需要与服务器的支持人员交谈

如果浏览器正常工作,请尝试使用
wget
实用程序重复此过程。如果
wget
给您带来问题,请返回您的浏览器,找出浏览器在HTTP请求中发送的确切标题,并尝试获取
wget
以使用相同的标题。一旦你有了
wget
工作,记下标题

最后返回Java代码,并对其进行修改,使其发送的HTTP请求头与用于
wget
的HTTP请求头相同


是的,我必须使用我所在大学的代理进行身份验证,然后才能访问所有数据。代理身份验证在“日志页面”甚至其他网站上都能完美地工作,因此我排除了与此相关的问题

我想你可能已经排除了真正的问题@BalasC并不是在谈论代理身份验证。相反,他说的是IEEE站点的身份验证。仅仅因为网站的一部分似乎在没有身份验证的情况下工作并不意味着它会全部工作。(然而,我原以为该网站会以“禁止”或“需要授权”的错误回应,而不是提供奇怪的内容。)


另一种可能性是,该网站试图使用自动工具防止“屏幕抓取”其内容。检查网站的“服务条款”,看看你尝试做的事情是否被允许。(您可以选择忽略ToS并规避技术措施,但随后您可能会发现自己或您的组织IP被阻止,或者您可能会在停止和终止关于侵犯版权的信件的末尾。)

我找到了解决问题的方法,我丢失了一些标题信息,这些信息显然是动态页面的一部分所需要的

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


我发现在我的例子中,我需要指定“Accept Language”(接受语言)数据,我找到了解决问题的方法,我丢失了一些标题信息,这些信息显然是动态页面的一部分所需要的

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


我发现在我的例子中,我需要指定“接受语言”数据

您可以控制另一端的服务器吗?不幸的是,我没有。我想做的是从IEEE Explore获取信息。当我在期刊上获得发表论文的信息时,一切正常,但当我试图从会议上获得论文时,一切都不起作用。这里是两个示例页面的链接,会议论文,期刊论文,该站点似乎需要登录。是否考虑到这一点?是的,我必须使用我所在大学的代理进行身份验证,然后才能访问所有数据。代理身份验证在“日志页”甚至其他站点上都能完美地工作,因此我排除了与此相关的问题。您是否可以控制另一端的服务器?不幸的是,我没有。我想做的是从IEEE Explore获取信息。当我得到发表在《华尔街日报》上的论文的信息时,一切都很顺利