2011-08-09 51 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

相关问题