【问题标题】:403 error while fetching content from URL从 URL 获取内容时出现 403 错误
【发布时间】: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 响应。但不幸的是,事实并非如此。
  • 好的。试着让它睡觉,然后像家里建议的那样。由于在很短的时间内多次查询,他们可能会禁止您访问该页面。

标签: java http-status-code-403


【解决方案1】:

403 表示请求被理解但服务器拒绝处理。查看您发送的标头。当失败时运行 TRACE http 方法来检索您正在执行的确切请求。

当您建立http 连接时,您会随请求一起发送您想要执行的方法。

其中一种方法是TRACE

通过执行TRACE 方法,您可以在正文响应中看到您刚刚执行的请求。所以你可以看看它是否仍然有效。

如果他们有任何机制,也许你已经超过了请愿的最大数量。

【讨论】:

  • 请原谅我的无知,但我不太确定运行debug http 方法是什么意思。完成了吗here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
  • 2017-01-04
  • 2021-04-06
  • 2021-08-09
相关资源
最近更新 更多