我有以下几行java代码:
d = Jsoup
.connect(getUrl)
.timeout(5000)
.userAgent(
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0")
.followRedirects(true)
.get();
在实现Runnable的线程类中,由线程执行器启动。 我的问题是,由于以下原因,Jsoup一直在触发异常:
org.jsoup.HttpStatusException: HTTP error fetching URL. Status=502, URL=http://sub.domain.de:8080/ws/Codes/Texts-Listen;Stud-Sets;name;AAFF-B?template=UNEinzelGru&weeks=39&days=&periods=3-64&Width=0&Height=0
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:449)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:424)
at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:178)
at org.jsoup.helper.HttpConnection.get(HttpConnection.java:167)
at com.noncomercial.parsingthread.Threads.VParserThread.run(VThread.java:62)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
如果我尝试在浏览器中访问该网址,一切正常。 如果我尝试jsoup连接样本,如:
Document d = Jsoup.connect("http://sub.domain.de:8080/ws/Codes/Texts-Listen;Stud-Sets;name;AAFF-B?template=UNEinzelGru&weeks=39&days=&periods=3-64&Width=0&Height=0").get();
它也不会触发异常。我真的不知道我的线程或我的关系有什么问题。
任何想法: - /?
//编辑: 好的,这很有趣: 当我开始使用此连接上的断点调试我的代码时,它神奇地再也没有发生了。
所以我想到了服务器端同时出现多个连接的问题....
我将ExecutorService设置为:executor = Executors.newFixedThreadPool(1);所以一次只使用一个线程。它运行10分钟,没有错误发生......
好吧,我认为有超过500页要解析,基于线程的解决方案会很棒,任何想法如何摆脱这些错误?
答案 0 :(得分:0)
作为建议:
也许您的网址中存在编码问题 尝试使用以下内容:
URLEncoder.encode(queryString, "UTF-8")
注意:也许你只需要编码Query-String,而不是整个URL!
未经测试
请点击这里查看simmilar问题:https://stackoverflow.com/a/12476622/3887073
编辑:
也许这是服务器问题
请参阅HTTP错误502 服务暂时过载
答案 1 :(得分:0)
正如编辑Ben所说,它看起来像是502 Service Temporarily Overloaded错误。可悲的是,Jsoup不再提供有关错误的更多信息,所以我可以提前得到那条消息,但我已经得到了它。
如果我没有将最大数量的线程设置为8以上,那么它可以正常工作。非常感谢投入的人:)