2010-05-29 151 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」數據