Java - 无法从网站获取 HTML 纯文本

标签 java html https character-encoding url-encoding

我有一个奇怪的问题。我过去曾使用过一个我自己编写的程序来检查 fanfiction.net 上的故事是否有新的章节出现,该程序即使现在也能正常工作(尽管它的 GUI 仍有很多不足之处)。

但是,当我尝试制作新版本时,即使我使用完全相同的代码(复制粘贴),我似乎也无法加载网页。这是下面的代码。发送类似 https://www.fanfiction.net/s/11012678/36 的 URL 时 对于 nextExists 方法,它应该返回“true”。我的旧程序可以,但这个程序不能,即使是相同的代码。

我能想到的唯一可能有任何影响的是我正在使用新版本的 Eclipse,这可能会导致它错误地编码,但我已经尝试检查所有常见的编码类型,但没有任何内容提供 HTML明文。

有谁知道这可能是什么原因造成的吗?如果我不能解决这个问题,这并不是一场灾难,但我想知道 future 是否会再次遇到同样的问题。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;

public class Util {
    private static final String BEFORE = "<button class=btn TYPE=BUTTON onClick=\"self.location='", AFTER = "'\">Next &gt;</button>", SITE = "fanfiction.net";

    public static String readSite(String path) throws Exception{
        URL url = new URL(path);
        BufferedReader in = null;
        String line;
        try{
            StringBuilder builder = new StringBuilder();
            in = new BufferedReader(new InputStreamReader(url.openStream()));
            line = in.readLine();
            if(line == null){
                return null;
            }
            builder.append(line);
            while((line = in.readLine()) != null){
                builder.append('\n' + line);
            }
            return builder.toString();
        } finally{
            if(in != null){
                in.close();
            }
        }
    }

    public static String updatePathToEnd(String path) throws Exception{
        outer: while(nextExists(path)){
            String data = readSite(path);
            if(path.contains(SITE)){
                String link = path.substring(0, path.indexOf(SITE) + SITE.length()) + data.substring(data.indexOf(BEFORE) + BEFORE.length(), data.indexOf(AFTER));
                if(readSite(link) != null) {
                    path = link;
                    continue outer;
                }
            }
        }
        return path;
    }

    public static boolean nextExists(String path) throws Exception{
        String text = readSite(path);
        if(path.contains(SITE)){
            return text==null ? false : text.contains(AFTER);
        }
        return false;
    }

}

最佳答案

我在bluej中尝试过并且工作完美,看来问题出在Eciplse中 问候

关于Java - 无法从网站获取 HTML 纯文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54773647/

相关文章:

c# - ServiceStack Soap 1.2 HTTPS 客户端

java - 如何在内部类中调用继承类的构造函数

java - 如何获取 Android 中对象的内存大小或性能基准?

java - Java 中的 x86 80 位浮点类型

html - 更改整个应用程序的比例和字体大小

jquery - Twitter Bootstrap 3 中的垂直居中

javascript - 通过从 XMLHTTPREQUEST 调用将 Windows 服务中的自托管 Web Api 配置为使用 SSL

java - Webservice-Client : Common approach with Spring WS, JAXB 和一个 WSDL 文件?

html - 是否有任何仅适用于 1366*768 横向设备的桌面媒体查询

php - https登录后续页面应该使用http吗?