Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:can';无法从URL获取html_Java_Html_Url - Fatal编程技术网

Java:can';无法从URL获取html

Java:can';无法从URL获取html,java,html,url,Java,Html,Url,我正在尝试从URL读取html文件。我的代码适用于大多数网站,但有些网站除外,例如。我想我需要设置java代理还是什么 这是我的密码: try { URL webPage = new URL("http://dota2.gamepedia.com/Dota_2_Wiki"); URLConnection con = webPage.openConnection(); con.setConnectTimeout(5000);

我正在尝试从URL读取html文件。我的代码适用于大多数网站,但有些网站除外,例如。我想我需要设置java代理还是什么

这是我的密码:

    try {
        URL webPage = new URL("http://dota2.gamepedia.com/Dota_2_Wiki");

        URLConnection con = webPage.openConnection();
        con.setConnectTimeout(5000);
        con.setReadTimeout(5000);

        BufferedReader in = new BufferedReader(
                            newInputStreamReader(con.getInputStream()));

        String inputLine;
        while ((inputLine = in.readLine()) != null)
            System.out.println(inputLine);

        in.close();
    }
    catch (MalformedURLException exc){exc.printStackTrace();}
    catch (IOException exc){exc.printStackTrace();}
因此:

java.io.IOException: Server returned HTTP response code: 403 for URL: http://dota2.gamepedia.com/Dota_2_Wiki
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1838)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1439)
at com.Popov.Main.main(Main.java:17)
错误代码403:我如何访问它?顺便说一句,它在浏览器中正常工作

您可以简单地尝试使用html解析器

public static void main(String[] args) throws IOException {

        Document doc = Jsoup
                .connect("http://dota2.gamepedia.com/Dota_2_Wiki")
                .userAgent(
                        "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36")
                .timeout(0).followRedirects(true).execute().parse();
        Elements titles = doc.select(".entrytitle");

        // print all titles in main page
        for (Element e : titles) {
            System.out.println("text: " + e.text());
            System.out.println("html: " + e.html());
        }

        // print all available links on page
        Elements links = doc.select("a[href]");
        for (Element l : links) {
            System.out.println("link: " + l.attr("abs:href"));
        }

    }

您的问题很可能是因为未正确设置用户代理。给你们这些喜欢香草爪哇的人。这些是代码

private void sendGet() throws Exception {

    String url = "http://dota2.gamepedia.com/Dota_2_Wiki";

    URL obj = new URL(url);
    CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();

    con.setRequestMethod("GET");
    con.setRequestProperty("User-Agent", USER_AGENT);

    int responseCode = con.getResponseCode();
    System.out.println("\nSending 'GET' request to URL : " + url);
    System.out.println("Response Code : " + responseCode);

    BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();

    while ((inputLine = in.readLine()) != null) {
        response.append(inputLine);
    }
    in.close();

    System.out.println(response.toString());

}

请注意,您还需要设置cookie,因为当我在没有cookie的情况下尝试它时,代码将给我许多重定向循环

我认为您这里的问题是服务器不接受您的“用户代理”字符串并返回403禁止代码

一个答案建议使用Jsoup并手动设置用户代理,但没有解释设置用户代理是关键步骤。你可以使用这种方法


或者,您可以自己读取并设置URLConnection的用户代理。这种方法不需要任何外部库。

没有错误。进程已完成,退出代码为0。如果不将html打印到控制台,就像URL是空的一样。您从哪里知道它。您可以在不记录异常的情况下处理异常。这是一个非常糟糕的编程。是的,对不起,我是一个非常初学者。收到错误代码,编辑的帖子“403禁止”看起来你没有权限打开这个网站。是的,但是为什么我可以用浏览器打开它,这正常吗?谢谢,当然可以,但是我想知道为什么没有外部库它不能工作谢谢,工作很好,现在我得到了它。