2017-05-14 73 views
1

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

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

下一个= /日志/

一般

请求URL:https://school.proServer.ru/?next=/diary/ 请求方法:POST 状态代码:302 FOUND 远程地址:94 ..... 推荐人政策:不推荐使用何时降级

响应头

访问控制允许来源:* 缓存控制:最大年龄= 0 连接:保活 的Content-Type:text/html的; charset = utf-8 日期:2017年5月14日(星期日)17:59:37 GMT 到期时间:2017年5月14日星期日17:59:38 GMT 最后修改:2017年五月14日(星期日)17:59:38 GMT 地点:https://school.proServer.ru/diary/ ...

请求头

接受:text/html的,是application/xhtml + xml的,应用/ XML; q = 0.9,image/webp,/; q = 0.8 Accept-Encoding:gzip,deflate,br Accept-Language:ru-RU,ru; q = 0.8,en-US; q = 0.6,en; q = 0.4 ...的Referer :https://school.proServer.ru/?next=/diary/

表单数据

csrfmiddlewaretoken:nybZEyn8GhJWV4om8TFx1uXK4iRebjKl

index_page_view-CURRENT_STEP:AUTH

AUTH-用户名名称:myusername

认证密码:MYPASSWORD

下一页在控制台

日记/

一般 请求URL:https://school.proServer.ru/diary/ 请求方法:GET 状态代码:200 OK 远程地址:94.41.0.7:443 推荐人政策:不推荐何时降级

响应头 连接:保持活动 Content-Type:text/html; charset = utf-8 Set-Cookie:...

请求头 接受:text/html的,应用/ XHTML + xml的,应用/ XML; Q = 0.9,图像/ WEBP,/; Q = 0.8 接受编码:gzip,放气,BR Accept-Language:ru-RU,ru; q = 0.8,en-US; q = 0.6,en; q = 0.4 Cache-Control:max-age = 0 Connection:keep-alive Cookie:...

我的代码(我得到一个令牌):

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 error fetching URL. Status=403, URL= https://school.proServer.ru/?next=/diary/

请帮帮我!

+0

也许'next =/diary /'必须被编码? –

+0

如何做到这一点?如何更正请求? – perepelka

+0

'“https://school.proServer.ru/?next=”+ URLEncoder.encode(“/ diary /”,“UTF-8”)' –

回答

0

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

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

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