Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Jsoup获取不同的HTML,只有默认的查询页面,而不是结果页面_Android_Jsoup - Fatal编程技术网

Android Jsoup获取不同的HTML,只有默认的查询页面,而不是结果页面

Android Jsoup获取不同的HTML,只有默认的查询页面,而不是结果页面,android,jsoup,Android,Jsoup,我正试图从网站上检索一些停车数据,以便在Android中显示。 现在我正试图从这个站点查询一些数据(AB-5678) (中文版)。 查询页面和结果页面都使用相同的URL 镀铬控制台 以下是我在Chrome控制台中成功查询后发布的内容 (标题) (数据) 我试着用Chrome插件POSTMAN再次查询,他也给了我一个成功的结果页面。 但是,当我利用Jsoup查询数据时,如下所示 Connection.Response resource = Jsoup.connect("https:/

我正试图从网站上检索一些停车数据,以便在Android中显示。 现在我正试图从这个站点查询一些数据(AB-5678) (中文版)。
查询页面和结果页面都使用相同的URL

镀铬控制台 以下是我在Chrome控制台中成功查询后发布的内容

(标题)

(数据)

我试着用Chrome插件POSTMAN再次查询,他也给了我一个成功的结果页面。

但是,当我利用Jsoup查询数据时,如下所示

    Connection.Response resource = Jsoup.connect("https://ebill.ba.org.tw/CPP//DesktopDefault.aspx?TabIndex=4&TabId=153")
        .timeout(Define.WEBTIMEOUT)
        .method(Connection.Method.GET)
        .execute();
    Document document = Jsoup.connect("https://ebill.ba.org.tw/CPP//DesktopDefault.aspx?TabIndex=4&TabId=153")
        .data("__EVENTTARGET", "")
        .data("__EVENTARGUMENT", "")
        .data("__VIEWSTATE", resource.parse().getElementById("__VIEWSTATE").val())
        .data("__VIEWSTATEGENERATOR", resource.parse().getElementById("__VIEWSTATEGENERATOR").val())
        .data("ctl00$Desktopthreepanes1$ThreePanes$ctl13$VehicleType", "C")
        .data("ctl00$Desktopthreepanes1$ThreePanes$ctl13$CarNo", "AB-5678")
                .data("ctl00$Desktopthreepanes1$ThreePanes$ctl13$OkButton", "")
        .referrer("https://ebill.ba.org.tw/CPP//DesktopDefault.aspx?TabIndex=4&TabId=153")
        .header("Cache-Control","no-cache")
        .header("Host", "ebill.ba.org.tw")
        .header("Origin", "https://ebill.ba.org.tw")
        .header("Upgrade-Insecure-Requests", "1")
        .header("Content-Type", "application/x-www-form-urlencoded")
        .cookie("IsPassClientEnvironDetection", "true")
        .cookie("IsPassMobileClientEnvironDetection","true")
        .cookie("c","1450682673891")
        .followRedirects(true)
        .userAgent("Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36")
        .cookies(resource.cookies())
        .timeout(Define.WEBTIMEOUT)
        .post();
然而,我得到的只是默认的查询页面。

我在谷歌上搜索了所有可能的答案,我不认为这是JavaScript cookies的结果,我设置了userAgent…..我错过了什么吗?

我发现了问题所在

我试图分析每个帖子的内容长度,Chrome中的值约为1100,而我的jsoup中的值仅为500

跟踪之后,我发现_viewstateval长度应该是700+但在jsoup中总是200

最后,我发现cookies应该设置在[GET]阶段,否则这个网站会给你一个错误的视图状态值

就是

    Connection.Response resource = Jsoup.connect("https://ebill.ba.org.tw/CPP//DesktopDefault.aspx?TabIndex=4&TabId=153")
        .timeout(Define.WEBTIMEOUT)
        .method(Connection.Method.GET)
        .execute();
应该是

    Connection.Response resource = Jsoup.connect("https://ebill.ba.org.tw/CPP//DesktopDefault.aspx?TabIndex=4&TabId=153")
        .cookie("IsPassClientEnvironDetection", "true")
        .cookie("IsPassMobileClientEnvironDetection", "true")
        .timeout(Define.WEBTIMEOUT)
        .method(Connection.Method.GET)
        .execute();

为什么要发送两次cookies?不,resource.cookies()只包含{ASP.NET_SessionId},所以我必须发送其他3个键才能通过JS检查。