Pec*_*277 6 java connection jsoup
我正在尝试创建一个应用程序来从网站上的多个页面中删除内容.我正在使用JSoup进行连接.这是我的代码:
for (String locale : langList){
sitemapPath = sitemapDomain+"/"+locale+"/"+sitemapName;
try {
Document doc = Jsoup.connect(sitemapPath)
.userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21")
.timeout(10000)
.get();
Elements element = doc.select("loc");
for (Element urls : element) {
System.out.println(urls.text());
}
} catch (IOException e) {
System.out.println(e);
}
}
Run Code Online (Sandbox Code Playgroud)
一切都在大部分时间都很完美.但是,我希望能够做一些事情.
首先,有时404状态将返回或500状态可能是301.使用下面的代码,它将只打印错误并移动到下一个URL.我希望能够做的是尝试返回所有链接的url状态.如果页面连接打印200,如果不打印相关的状态代码.
其次我有时会发现这个错误"java.net.SocketTimeoutException:read timed out"我可以增加我的超时但是我宁愿尝试连接3次,在第3次失败时我想将URL添加到"失败"数组所以我可以在将来重试失败的连接.
知识比我更多的人可以帮助我吗?
fea*_*gal 17
以上为我返回IOException而不是execute()返回正确的状态代码.
使用JSoup-1.6.1我必须更改上面的代码才能使用ignoreHttpErrors(true).
现在,当代码返回响应而不是抛出异常时,您可以检查错误代码/消息.
Connection.Response response = null;
try {
response = Jsoup.connect(bad_url)
.userAgent("Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5")
.timeout(100000)
.ignoreHttpErrors(true)
.execute();
} catch (IOException e) {
System.out.println("io - "+e);
}
System.out.println("Status code = " + response.statusCode());
System.out.println("Status msg = " + response.statusMessage());
Run Code Online (Sandbox Code Playgroud)
输出:
Status code = 404
Status msg = Not Found
Run Code Online (Sandbox Code Playgroud)
ste*_*vls 15
对于您的第一个问题,您可以分两步进行连接/读取,停止在中间询问状态代码,如下所示:
Connection.Response response = Jsoup.connect(sitemapPath)
.userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21")
.timeout(10000)
.execute();
int statusCode = response.statusCode();
if(statusCode == 200) {
Document doc = connection.get();
Elements element = doc.select("loc");
for (Element urls : element) {
System.out.println(urls.text());
}
}
else {
System.out.println("received error code : " + statusCode);
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果响应格式错误的HTTP等,该execute()方法将失败,IOException如果它无法连接到服务器,那么您将需要处理它.但是,只要服务器说出有意义的内容,您就能够读取状态代码并继续.此外,如果您已经要求Jsoup遵循重定向,您将看不到30x响应代码b/c Jsoup将从提取的最终页面设置状态代码.
至于你的第二个问题,你需要的只是一个循环我刚刚给你的代码示例,它包含一个try/catch块SocketTimeoutException.当您捕获异常时,循环应该继续.如果您能够获取数据,那么返回或中断.如果您需要更多帮助,请大喊大叫!
| 归档时间: |
|
| 查看次数: |
22765 次 |
| 最近记录: |