我正在使用Apache HTTPClient 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);
答案 0 :(得分:3)
通过尝试使用Web浏览器获取同一页面,我将采用这种方式开始。如果你无法解决这个问题,那么可以肯定的是,真正的问题在于服务器。您需要与服务器的支持人员交谈。
如果浏览器有效,请尝试使用wget
实用程序重复此过程。如果wget
给您带来问题,请返回浏览器并确切了解浏览器在HTTP请求中发送的标头,并尝试让wget
使用相同的标头。在您wget
工作后,请记下标题。
最后返回到您的Java代码,并对其进行修改,以便它发送的HTTP请求标头与适用于wget
的标头相同。
是的,我必须使用我大学的代理进行身份验证,然后我才能访问所有数据。代理身份验证对于“日志页面”甚至其他网站都运行良好,因此我排除问题与此相关。
我认为你可能排除了真正的问题。 @BalasC不是在谈论代理身份验证。相反,他正在谈论IEEE网站上的身份验证。并且只是因为网站的一部分似乎没有认证而工作并不意味着一切都会。 (但是,我认为该网站会以“禁止”或“需要授权”错误回复,而不是提供奇怪的内容。)
另一种可能性是该网站试图使用自动工具阻止其内容的“屏幕抓取”。检查网站的“服务条款”,看看是否允许您尝试执行的操作。 (您可以选择忽略ToS并规避技术措施,但随后您可能会发现自己或您的组织IP被阻止,或者您可能会在停止和终止的信件上谈论侵犯版权。)
答案 1 :(得分:0)
我找到了问题的解决方案,我遗漏了一些标题信息,这些信息显然只是动态页面的一部分。
为了解决我的问题,我首先使用wireshark查看浏览器和服务器之间的通信,然后添加了我丢失的所有标头。
我发现在我的情况下我需要指定'Accept-Language'数据