我在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/
请帮助我!
答案 0 :(得分:0)
如果“referer”标题未与请求一起发送,则某些网站无效。使用Jsoup访问这些网站时可能会出现HTTP 403错误,因为默认情况下Jsoup为“referer”标头传递空值。
要设置referrer或“referer”标头,可以使用Connection类的referrer方法。我的解决方案 - 在授权中添加一行:
.referrer("https://school.proServer.ru/?next=/diary/")