【发布时间】:2011-08-09 13:55:39
【问题描述】:
我正在尝试自动化流程。为此,我需要通过在 1 次运行中多次点击 URL 来获取 XML,然后对其进行解析。对于程序的 1 次运行,URL 可能会被点击 4 到 25 次。在返回 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。请注意,如果需要进行更改,我无法控制源代码 here
另外,我不确定this link 是否有帮助。
谢谢。
[更新 1]: 这在某种程度上是有效的,无需
sleep:
try{
doc = builder.build(conn.getInputStream());
}catch(IOException ioEx){
doc = builder.build(new InputSource(url.openStream()));
}
【问题讨论】:
-
您是否尝试“减慢”处理速度,例如每次通话后睡觉?
-
我确实想过但还没有尝试过。如果收到 403,您认为先正常点击然后立即
sleep会更好吗?我想避免每次点击后都必须sleep。 -
为什么要多次点击页面? XML 是否每次都更改?如果不是,您不能暂时存储所有内容并解析出您需要的内容吗?
-
每次查询都是不同的 XML 响应。我真的希望我的所有查询都能得到 1 个 XML 响应。但不幸的是,事实并非如此。
-
好的。试着让它睡觉,然后像家里建议的那样。由于在很短的时间内多次查询,他们可能会禁止您访问该页面。