我在Android网站上的授权不起作用

时间:2017-05-14 18:28:10

标签: android authorization jsoup

我在Android网站上的授权不起作用。我首先使用Chrome控制台调查了对该网站的请求。

在网页https://school.proServer.ru/?next=/diary/上有一个授权窗口。我填写了登录名和密码字段,然后点击“登录”。 Chrome控制台信息:

?下一= /日记/

一般

请求URL:https://school.proServer.ru/?next=/diary/    请求方法:POST    状态代码:302 FOUND    远程地址:94 ......    推荐人政策:no-referrer-when-downgrade

响应标题

访问控制允许来源:*    缓存控制:最大年龄= 0    连接:保持活跃    内容类型:text / html的;字符集= utf-8的    日期:2017年5月14日星期日17:59:37 GMT    到期日:2017年5月14日星期日17:59:38 GMT    Last-Modified:太阳,2017年5月14日17:59:38 GMT    位置:https://school.proServer.ru/diary/    ...

请求标题

接受:text / html,application / xhtml + xml,application / xml; Q = 0.9,图像/ WEBP, / 的; Q = 0.8    Accept-Encoding:gzip,deflate,br    接受语言:RU-RU,如; Q = 0.8,EN-US; Q = 0.6,连接; Q = 0.4 ...    引用者:https://school.proServer.ru/?next=/diary/

表格数据

csrfmiddlewaretoken:nybZEyn8GhJWV4om8TFx1uXK4iRebjKl

index_page_view-CURRENT_STEP:AUTH

AUTH-用户名名称:myusername

认证密码:输入mypassword

控制台中的下一页

日记/

常规    请求网址:https://school.proServer.ru/diary/    请求方法:GET    状态代码:200 OK    远程地址:94.41.0.7:443    推荐人政策:no-referrer-when-downgrade

响应标头    连接:保持活跃    内容类型:text / html的;字符集= utf-8的    设置Cookie:......

请求标题    接受:text / html的,应用/ XHTML + xml的,应用/ XML; Q = 0.9,图像/ WEBP, / 的; Q = 0.8    Accept-Encoding:gzip,deflate,br    接受语言:RU-RU,如; Q = 0.8,EN-US; Q = 0.6,连接; Q = 0.4    缓存控制:最大年龄= 0    连接:保持活跃    饼干:...

我的代码(我得到一个代币):

 try {

 Connection.Response res1 = Jsoup.connect("https://school.proServer.ru")
     .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36")
     .header("Content-Type", "application/x-www-form-urlencoded")
     .data("next", "/diary/")
     .method(Connection.Method.GET)
     .execute();
 Document welcomePage = res1.parse();
 welcomCookies = res1.cookies();
 Element input = welcomePage.select("input[name=csrfmiddlewaretoken]").first();

 token = input.attr("value");

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

 System.out.println("token " + token);
 System.out.println("welcomCookies " + welcomCookies.toString());

我的授权:

try {

 Connection.Response res = Jsoup
     .connect("https://school.proServer.ru/?next=/diary/")
     .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36")
     .header("Content-Type", "application/x-www-form-urlencoded")
     .followRedirects(true)
     .header("Access-Control-Allow-Origin", "*")
     .timeout(7000)
     .data("auth-username", log)
     .data("auth-password", pass)
     .data("index_page_view-current_step", "auth")
     .data("csrfmiddlewaretoken", token)
     .method(Connection.Method.POST)
     .cookies(welcomCookies)
     .execute();

 System.out.println(res.url());

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

发生错误:

  

org.jsoup.HttpStatusException:HTTP错误提取URL。状态= 403,   URL = https://school.proServer.ru/?next=/diary/

请帮助我!

1 个答案:

答案 0 :(得分:0)

如果“referer”标题未与请求一起发送,则某些网站无效。使用Jsoup访问这些网站时可能会出现HTTP 403错误,因为默认情况下Jsoup为“referer”标头传递空值。

要设置referrer或“referer”标头,可以使用Connection类的referrer方法。我的解决方案 - 在授权中添加一行:

.referrer("https://school.proServer.ru/?next=/diary/")