无法使用JSoup获取网页

时间:2013-12-05 21:29:26

标签: android-asynctask jsoup

我正在尝试使用JSoup获取以下网页的内容: http://techmvs.technion.ac.il:80/cics/wmn/wmngrad?ORD=1

但是,我总是得到以下例外:

12-05 23:18:57.056: W/System.err(17811): java.lang.IllegalArgumentException: Header name must not be empty
12-05 23:18:57.056: W/System.err(17811):    at org.jsoup.helper.Validate.notEmpty(Validate.java:102)
12-05 23:18:57.056: W/System.err(17811):    at org.jsoup.helper.HttpConnection$Base.header(HttpConnection.java:238)
12-05 23:18:57.056: W/System.err(17811):    at org.jsoup.helper.HttpConnection$Response.processResponseHeaders(HttpConnection.java:600)
12-05 23:18:57.056: W/System.err(17811):    at org.jsoup.helper.HttpConnection$Response.setupFromConnection(HttpConnection.java:566)
12-05 23:18:57.056: W/System.err(17811):    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:452)
12-05 23:18:57.056: W/System.err(17811):    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:424)
12-05 23:18:57.056: W/System.err(17811):    at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:178)
12-05 23:18:57.056: W/System.err(17811):    at org.jsoup.helper.HttpConnection.get(HttpConnection.java:167)
12-05 23:18:57.056: W/System.err(17811):    at com.technion.coolie.ug.MainActivity$MyAsync.doInBackground(MainActivity.java:132)
12-05 23:18:57.056: W/System.err(17811):    at com.technion.coolie.ug.MainActivity$MyAsync.doInBackground(MainActivity.java:1)
12-05 23:18:57.066: W/System.err(17811):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
12-05 23:18:57.066: W/System.err(17811):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
12-05 23:18:57.066: W/System.err(17811):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
12-05 23:18:57.066: W/System.err(17811):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
12-05 23:18:57.066: W/System.err(17811):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
12-05 23:18:57.066: W/System.err(17811):    at java.lang.Thread.run(Thread.java:841)

导致此异常的代码是:

class MyAsync extends AsyncTask<Void, Void, Void>{

@Override
protected Void doInBackground(Void... params) {
    try {
        Document doc =  Jsoup.connect("http://techmvs.technion.ac.il/cics/wmn/wmngrad?ORD=1").get();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

作为Java项目,此代码为我提供了相关页面(在发布用户名和密码后):

    public static Document gradesHtmlPost(String url, String userid,
        String password) {
    try {
        Document doc =  Jsoup.connect(url).get();
        Main.gradesUrl = doc.select("form").first().attr("action");
        return  (Jsoup.connect(Main.gradesUrl).data("userid", userid)
                .data("password", password).data("function", "signon")
                .post());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}

其中“url”输入是上述的输入: “http://techmvs.technion.ac.il/cics/wmn/wmngrad?ORD=1

但是,在将其转换为Android项目(将它们全部放在AsyncTask中)时,我收到以下错误:

12-06 13:05:58.568: W/System.err(27687): java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: Header name must not be empty
12-06 13:05:58.568: W/System.err(27687):    at java.util.concurrent.FutureTask.report(FutureTask.java:93)
12-06 13:05:58.568: W/System.err(27687):    at java.util.concurrent.FutureTask.get(FutureTask.java:163)
12-06 13:05:58.568: W/System.err(27687):    at android.os.AsyncTask.get(AsyncTask.java:483)
12-06 13:05:58.568: W/System.err(27687):    at com.technion.coolie.ug.MainActivity.onCreate(MainActivity.java:114)
12-06 13:05:58.568: W/System.err(27687):    at android.app.Activity.performCreate(Activity.java:5243)
12-06 13:05:58.568: W/System.err(27687):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
12-06 13:05:58.568: W/dalvikvm(27687): threadid=12: thread exiting with uncaught exception (group=0x41c54b90)
12-06 13:05:58.568: W/System.err(27687):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2140)
12-06 13:05:58.568: W/System.err(27687):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
12-06 13:05:58.568: W/System.err(27687):    at android.app.ActivityThread.access$700(ActivityThread.java:135)
12-06 13:05:58.568: W/System.err(27687):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
12-06 13:05:58.568: W/System.err(27687):    at android.os.Handler.dispatchMessage(Handler.java:102)
12-06 13:05:58.568: W/System.err(27687):    at android.os.Looper.loop(Looper.java:137)
12-06 13:05:58.568: W/System.err(27687):    at android.app.ActivityThread.main(ActivityThread.java:4998)
12-06 13:05:58.568: W/System.err(27687):    at java.lang.reflect.Method.invokeNative(Native Method)
12-06 13:05:58.568: W/System.err(27687):    at java.lang.reflect.Method.invoke(Method.java:515)
12-06 13:05:58.568: W/System.err(27687):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
12-06 13:05:58.568: W/System.err(27687):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
12-06 13:05:58.568: W/System.err(27687):    at dalvik.system.NativeStart.main(Native Method)
12-06 13:05:58.568: W/System.err(27687): Caused by: java.lang.IllegalArgumentException: Header name must not be empty
12-06 13:05:58.568: W/System.err(27687):    at org.jsoup.helper.Validate.notEmpty(Validate.java:102)
12-06 13:05:58.568: W/System.err(27687):    at org.jsoup.helper.HttpConnection$Base.header(HttpConnection.java:238)
12-06 13:05:58.568: W/System.err(27687):    at org.jsoup.helper.HttpConnection$Response.processResponseHeaders(HttpConnection.java:600)
12-06 13:05:58.568: W/System.err(27687):    at org.jsoup.helper.HttpConnection$Response.setupFromConnection(HttpConnection.java:566)
12-06 13:05:58.568: W/System.err(27687):    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:452)
12-06 13:05:58.568: W/System.err(27687):    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:424)
12-06 13:05:58.568: W/System.err(27687):    at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:178)
12-06 13:05:58.568: W/System.err(27687):    at org.jsoup.helper.HttpConnection.get(HttpConnection.java:167)
12-06 13:05:58.568: W/System.err(27687):    at com.technion.coolie.ug.MainActivity$MyAsync.doInBackground(MainActivity.java:145)
12-06 13:05:58.568: W/System.err(27687):    at com.technion.coolie.ug.MainActivity$MyAsync.doInBackground(MainActivity.java:1)
12-06 13:05:58.568: W/System.err(27687):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
12-06 13:05:58.568: W/System.err(27687):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
12-06 13:05:58.578: W/System.err(27687):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
12-06 13:05:58.578: W/System.err(27687):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
12-06 13:05:58.578: W/System.err(27687):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
12-06 13:05:58.578: W/System.err(27687):    at java.lang.Thread.run(Thread.java:841)
12-06 13:05:58.578: E/AndroidRuntime(27687): FATAL EXCEPTION: AsyncTask #1
12-06 13:05:58.578: E/AndroidRuntime(27687): Process: com.technion.coolie, PID: 27687
12-06 13:05:58.578: E/AndroidRuntime(27687): java.lang.RuntimeException: An error occured while executing doInBackground()
12-06 13:05:58.578: E/AndroidRuntime(27687):    at android.os.AsyncTask$3.done(AsyncTask.java:300)
12-06 13:05:58.578: E/AndroidRuntime(27687):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
12-06 13:05:58.578: E/AndroidRuntime(27687):    at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
12-06 13:05:58.578: E/AndroidRuntime(27687):    at java.util.concurrent.FutureTask.run(FutureTask.java:242)
12-06 13:05:58.578: E/AndroidRuntime(27687):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
12-06 13:05:58.578: E/AndroidRuntime(27687):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
12-06 13:05:58.578: E/AndroidRuntime(27687):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
12-06 13:05:58.578: E/AndroidRuntime(27687):    at java.lang.Thread.run(Thread.java:841)
12-06 13:05:58.578: E/AndroidRuntime(27687): Caused by: java.lang.IllegalArgumentException: Header name must not be empty
12-06 13:05:58.578: E/AndroidRuntime(27687):    at org.jsoup.helper.Validate.notEmpty(Validate.java:102)
12-06 13:05:58.578: E/AndroidRuntime(27687):    at org.jsoup.helper.HttpConnection$Base.header(HttpConnection.java:238)
12-06 13:05:58.578: E/AndroidRuntime(27687):    at org.jsoup.helper.HttpConnection$Response.processResponseHeaders(HttpConnection.java:600)
12-06 13:05:58.578: E/AndroidRuntime(27687):    at org.jsoup.helper.HttpConnection$Response.setupFromConnection(HttpConnection.java:566)
12-06 13:05:58.578: E/AndroidRuntime(27687):    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:452)
12-06 13:05:58.578: E/AndroidRuntime(27687):    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:424)
12-06 13:05:58.578: E/AndroidRuntime(27687):    at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:178)
12-06 13:05:58.578: E/AndroidRuntime(27687):    at org.jsoup.helper.HttpConnection.get(HttpConnection.java:167)
12-06 13:05:58.578: E/AndroidRuntime(27687):    at com.technion.coolie.ug.MainActivity$MyAsync.doInBackground(MainActivity.java:145)
12-06 13:05:58.578: E/AndroidRuntime(27687):    at com.technion.coolie.ug.MainActivity$MyAsync.doInBackground(MainActivity.java:1)
12-06 13:05:58.578: E/AndroidRuntime(27687):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
12-06 13:05:58.578: E/AndroidRuntime(27687):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)

有人可以解释我如何解决这个问题吗?

0 个答案:

没有答案