2017-05-14 47 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/")