我有一个从网址获取pagecontent的代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
public class GetPageFromURLAction extends Thread {
public String stringPageContent;
public String targerURL;
public String getPageContent(String targetURL) throws IOException {
String returnString="";
URL urlString = new URL(targetURL);
URLConnection openConnection = urlString.openConnection();
String temp;
BufferedReader in = new BufferedReader( newInputStreamReader(openConnection.getInputStream()));
while ((temp = in.readLine()) != null)
{
returnString += temp + "\n";
}
in.close();
// String nohtml = sb.toString().replaceAll("\\<.*?>","");
return returnString;
}
public String getStringPageContent() {
return stringPageContent;
}
public void setStringPageContent(String stringPageContent) {
this.stringPageContent = stringPageContent;
}
public String getTargerURL() {
return targerURL;
}
public void setTargerURL(String targerURL) {
this.targerURL = targerURL;
}
@Override
public void run() {
try {
this.stringPageContent=this.getPageContent(targerURL);
} catch (IOException e) {
e.printStackTrace();
}
}
}
有时我收到405或403的HTTP错误,结果字符串为空。 我尝试使用以下命令检查连接到URL的权限:
URLConnection openConnection = urlString.openConnection();
openConnection.getPermission()
但它通常会返回null。是否意味着我无权访问该链接?
我尝试用以下内容剥离网址的query
部分:
String nohtml = sb.toString().replaceAll("\\<.*?>","");
其中sb
是一个Stringbulder,但似乎并没有剥离整个查询子字符串。
在一个不相关的问题中,我想在这里使用线程,因为我必须检索许多URL; 如何创建多线程客户端以提高速度?
答案 0 :(得分:1)
相关的error definitions是:
403 Forbidden
服务器理解请求,但是 拒绝履行它。 授权无济于事 请求不应重复。如果 请求方法不是HEAD和 服务器希望公开为什么 请求尚未完成,它 应该描述原因 拒绝实体。如果是服务器 不希望提供这些信息 可供客户使用,状态 可以使用代码404(未找到) 代替。
405方法不允许
中指定的方法 请求行不允许 由...确定的资源 Request-URI中。响应必须包括 包含列表的Allow标头 请求的有效方法 资源。
所以是的,403意味着你没有权限,剥离查询可能根本没有帮助。
405意味着你没有正确地制定你的GET,但如果有服务器在返回405时真的意味着403,那就不会让我感到惊讶。
在这两种情况下,您都应该认为该网址永久无法访问。