我正在尝试使用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)
有人可以解释我如何解决这个问题吗?