在Java中获取不可用URL的pageContent时出现问题

时间:2010-05-11 01:46:30

标签: java http

我有一个从网址获取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; 如何创建多线程客户端以提高速度?

1 个答案:

答案 0 :(得分:1)

相关的error definitions是:

  

403 Forbidden

     

服务器理解请求,但是   拒绝履行它。   授权无济于事   请求不应重复。如果   请求方法不是HEAD和   服务器希望公开为什么   请求尚未完成,它   应该描述原因   拒绝实体。如果是服务器   不希望提供这些信息   可供客户使用,状态   可以使用代码404(未找到)   代替。

     

405方法不允许

     

中指定的方法   请求行不允许   由...确定的资源   Request-URI中。响应必须包括   包含列表的Allow标头   请求的有效方法   资源。

所以是的,403意味着你没有权限,剥离查询可能根本没有帮助。

405意味着你没有正确地制定你的GET,但如果有服务器在返回405时真的意味着403,那就不会让我感到惊讶。

在这两种情况下,您都应该认为该网址永久无法访问。