2011-08-09 49 views
2

我正在嘗試自動化一個進程。爲此我需要通過點擊一次URL來獲取XML,一次運行多次,然後解析它。對於該節目的一次運行,該URL可以在4到25次之間任意地點擊。這一切似乎都很好,直到返回403錯誤響應。從URL中提取內容時出現403錯誤

有趣的是,403會每5或6次出現一次URL。

我正在使用JDOM來解析XML響應。

我已經試過代碼:

Document doc = builder.build(new InputSource(url.openStream())); 

HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB;  rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 (.NET CLR 3.5.30729)"); 
Document doc = builder.build(conn.getInputStream()); 

隨着第二個我得到異常:

org.jdom.input.JDOMParseException: Error on line 1: White spaces are required between publicId and systemId. 

可能有人請幫我擺脫403.請注意,如果需要按照所討論的方式進行更改,我無法控制源代碼ut here

此外,我不確定this link是否有幫助。

謝謝。


[UPDATE 1]: 這是某種方式工作,而不必 sleep

try{ 
      doc = builder.build(conn.getInputStream()); 
     }catch(IOException ioEx){ 
      doc = builder.build(new InputSource(url.openStream())); 
} 
+2

您是否嘗試「減慢」處理速度,例如每次通話後睡覺? – home

+0

我確實考慮過它,但還沒有嘗試過。你是否認爲先打正常然後在收到403的情況下暫時「睡覺」會更好?我想避免每次擊中後都要「睡覺」。 – hkansal

+0

爲什麼你不得不打這麼多次? XML是否每次都會更改?如果不是,你不能暫時儲存所有的東西,解析出你需要的東西嗎? – Collecter

回答

3

403意味着該請求被理解,但服務器拒絕處理它。看看你發送的標題。如果失敗,請運行TRACE http方法來檢索您正在執行的確切申請。

當您建立http連接時,您與請求一起發送您要執行的方法。

其中一種方法是TRACE

通過執行TRACE方法,您可以在身體響應中看到剛纔執行的請願。所以你可以看看它是否仍然有效。

也許如果他們有任何機制,你就超出了最大請願數。

+0

請原諒我的無知,但我不確定通過運行'debug' http方法意味着什麼。這是否完成[here](http://www.discursive.com/books/cjcook/reference/http-webdav-sect-debug-http)? – hkansal

相關問題