【发布时间】: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