Jsoup登录失败 - 系统错误消息

时间:2016-12-09 12:23:47

标签: java android login jsoup

目前,我正在申请我需要登录新闻网站但由于某种原因我收到警告并且无法同时登录该网站。

新闻网站:http://www.malaysiakini.com/

新闻网站html表格: News website form

我的源代码:

 private void login(String username, String password){


    try {

        Connection.Response response = Jsoup.connect("http://www.malaysiakini.com/")
                .data("username", "username", "password", "password", "action","//login2.mkini.net/v2/login-exchange")
                .method(Connection.Method.GET)
                .execute();

        String cookie = response.cookie("JSESSIONID");



        Document document = Jsoup.connect("http://www.malaysiakini.com/")
                .cookie("JSESSIONID", cookie)
                .get();

        Elements loginData = document.select("logindata");


        if(!loginData.isEmpty()){
            Log.d("Login Data "," Fail : " + loginData);
        }

        else
            Log.d("Login Data "," Success : " + loginData);


    } catch (IOException e) {
        e.printStackTrace();
    }

}

警告:

W/System.err: org.jsoup.HttpStatusException: HTTP error fetching URL.    Status=405, URL=http://www.malaysiakini.com/
W/System.err:     at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:590)
W/System.err:     at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:540)
W/System.err:     at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:227)
W/System.err:     at com.example.azrie.VoiceTheNews.BackgroundProcessLogin.login(BackgroundProcessLogin.java:60)
W/System.err:     at com.example.azrie.VoiceTheNews.BackgroundProcessLogin.doInBackground(BackgroundProcessLogin.java:41)
W/System.err:     at com.example.azrie.VoiceTheNews.BackgroundProcessLogin.doInBackground(BackgroundProcessLogin.java:20)
W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:288)
W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
W/System.err:     at java.lang.Thread.run(Thread.java:841)

修改

我将方法从POST更改为GET并查看了网络,但我仍然不知道我在寻找什么,不知道我是否在正确的轨道上由于我对此非常新。我提供了一些截图供查看。

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

首先,您必须向网站发送GET请求才能获取Cookie。稍后您需要的cookie是_cfduid cookie。接下来,您必须向第二个网址发送POST个请求 - http://login2.mkini.net/v2/login-exchange,其中包含_cfduid和其他一些值,如下所示:
POST PARAMETERS

要获取URL,cookie,参数等,您可以使用浏览器的开发人员工具并监控浏览器和服务器之间的流量。
我还注意到您已使用Android代码标记了自己的问题,因此您可能希望使用某种工具来更改浏览器的user-agent字符串,因为该网站可能会在移动设备的不同方式。