【问题标题】:parsing html with issues in android app解析 html 与 android 应用程序中的问题
【发布时间】:2016-06-23 16:23:36
【问题描述】:

我正在尝试使用 Jsoup 在我的 android 应用程序中解析网页的 html,我遇到了这个特定页面的问题:http://techmvs.technion.ac.il/cics/wmn/wmngrad?ORD=1

这个字符串:

<!doctype html public "-//ietf//dtd html 3.0//en">:

当我尝试在下一个代码行中执行 Jsoup 连接时,它显然不是一个出现在标题部分中:

Response r = Jsoup.connect("http://techmvs.technion.ac.il/cics/wmn/wmngrad?ORD=1").followRedirects(true).execute();

它似乎把这个坏头作为一个空名称和空值的头,这导致了一个异常,这里是堆栈:

W: java.lang.IllegalArgumentException: Header name must not be empty
W:     at org.jsoup.helper.Validate.notEmpty(Validate.java:102)
W:     at org.jsoup.helper.HttpConnection$Base.header(HttpConnection.java:292)
W:     at org.jsoup.helper.HttpConnection$Response.processResponseHeaders(HttpConnection.java:828)
W:     at org.jsoup.helper.HttpConnection$Response.setupFromConnection(HttpConnection.java:772)
W:     at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:569)
W:     at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:540)
W:     at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:227)
W:     at gavi_anna_netanel.com.madomes.ug_login.GradesParser$GradesFetcher.getGradesList(GradesParser.java:48)
W:     at gavi_anna_netanel.com.madomes.ug_login.GradesParser$GradesFetcher.doInBackground(GradesParser.java:32)
W:     at gavi_anna_netanel.com.madomes.ug_login.GradesParser$GradesFetcher.doInBackground(GradesParser.java:28)
W:     at android.os.AsyncTask$2.call(AsyncTask.java:287)
W:     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
W:     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
W:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
W:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
W:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
W:     at java.lang.Thread.run(Thread.java:856)

重要的是,作为一个 JAVA 项目,它确实有效(尽管错误的标头也出现在 html 中)。

有没有办法告诉 Jsoup 忽略错误的标头并连接到 url? 如果没有,是否有另一个客户端不会因为这个错误的标头而在 android 上失败?

谢谢

【问题讨论】:

    标签: java android html header jsoup


    【解决方案1】:

    您是否尝试过使用 XML 解析器而不是 HTML 解析器和 parseBodyFragment() 而不是 parse()

    Document doc = Jsoup.parseBodyFragment(html, "", Parser.xmlParser());
    

    【讨论】:

    • 重定向给出了我真正想要解析的 url,所以我还没有 html,因为它没有连接
    猜你喜欢
    • 2011-11-16
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多