題目:在A頁面登陸後,重定向到A頁面,而後訪問B頁面,header中帶一指定內容"Content":"2018",而後從response中讀取answer的值。html
主要分三步分,首先在A頁面發送POST請求:java
String url = "http://192.168.1.105/"; String responseMsg = ""; byte[] responseBody = null; HttpClient httpclient = new HttpClient(); httpclient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY); httpclient.getParams().setParameter("http.protocol.single-cookie-header", true); PostMethod httpPost = new PostMethod(url); httpPost.setRequestHeader("ContentType", "application/xml;charset=utf-8"); String cookie = ".AspNetCore.Antiforgery.2asieuWmzUU=CfDJ8LzDUhYKe7pEsWY4r-H8oTev6zo3ttt4qg9Zo6xNEWNET1tpSwNSHS9SQf2xe1p9witfHgmLnLx1HKCvGsynU6Sv-YMB4u_Pbh0ZAQRoEAJ7KVGH09LsqrBowNV1uh6iU71ealeplU4Yps3td_dBh0I"; httpPost.setRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"); httpPost.setRequestHeader("Accept-Encoding", "gzip, deflate"); httpPost.setRequestHeader("Accept-Language", "zh-CN,zh;q=0.9"); httpPost.setRequestHeader("Cache-Control", "max-age=0"); httpPost.setRequestHeader("Connection","Keep-Alive"); httpPost.setRequestHeader("Content-Length", "274"); httpPost.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); httpPost.setRequestHeader("Host", "192.168.1.105"); httpPost.setRequestHeader("Origin", "192.168.1.105"); httpPost.setRequestHeader("Origin", "http://192.168.1.105"); httpPost.setRequestHeader("Referer", "http://192.168.1.105/"); httpPost.setRequestHeader("Upgrade-Insecure-Requests", "1"); httpPost.setRequestHeader("User-Agent", Constants.USER_AGENT); httpPost.setRequestHeader("Cookie", cookie);//ltpatoken+sessionid httpclient.getHttpConnectionManager().getParams().setConnectionTimeout(6000000); httpclient.getHttpConnectionManager().getParams().setSoTimeout(6000000); try { httpPost.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,new DefaultHttpMethodRetryHandler(3, false)); NameValuePair certsn=new NameValuePair("Input.Email", "yxteng@126.com"); NameValuePair certinfo=new NameValuePair("Input.Password", "&wxZC3`jBqo)'qtX"); NameValuePair subdn=new NameValuePair("__RequestVerificationToken", "CfDJ8LzDUhYKe7pEsWY4r-H8oTdN9wZgh60Tje5CyRR89Ps2Y67XUzTS7MdnpqmYWOjxqHVytkJq_cV3z8vwvsK6729LWWH1MRlV1QF6tqWRiOGEphxLKkbUxoKQfVEVRRjXV5LTKZafolsgJyOp0YbKnow"); NameValuePair ramcode=new NameValuePair("Input.RememberMe", "false"); httpPost.setRequestBody(new NameValuePair[]{certsn,certinfo,subdn,ramcode}); LogUtils.info("開始登錄..."); int statusCode = httpclient.executeMethod(httpPost); Cookie[] cookies = httpclient.getState().getCookies(); cookie=""; for (int i = 0; i < cookies.length; i++) { cookie+=cookies[i].toString(); if(i!=cookies.length-1){ cookie+=";"; } LogUtils.info(cookies[i].getName()+":"+cookies[i].getValue()); } LogUtils.info("COOKIE:"+cookie); if (statusCode == HttpStatus.SC_OK) { responseBody = httpPost.getResponseBody(); LogUtils.info("登錄成功"+statusCode); } else { responseMsg = String.valueOf("statusCode:"+statusCode); LogUtils.error("登錄失敗"+statusCode); }
而後get方法模擬重定向到本頁:web
cookie = ".AspNetCore.Antiforgery.2asieuWmzUU=CfDJ8LzDUhYKe7pEsWY4r-H8oTev6zo3ttt4qg9Zo6xNEWNET1tpSwNSHS9SQf2xe1p9witfHgmLnLx1HKCvGsynU6Sv-YMB4u_Pbh0ZAQRoEAJ7KVGH09LsqrBowNV1uh6iU71ealeplU4Yps3td_dBh0I; .AspNetCore.Identity.Application=CfDJ8LzDUhYKe7pEsWY4r-H8oTfyoqahKhxlTHouYjwJDlVmJ6BdZ8pxXvOLoHDu_Ci9kzyy9GKtpRYYF06bLr3flLY6oiM7ZEJRAH-ARkiwchgjVNWPB2STXkc42E-NtLz94J9RVVhluNbN99JUUCdSXKqQgj0MUq4EpB6D4zF-Diu2wkWjhIty8HxLX4-JG6r3X8XvcJnDyqwt4YgWimcJ_SrIsfS4xdem-9zBK4zPJtorPZZwlOah0IYR7hLd7-2TaJxCk_QvQG5GIaAqRc4A-2I8eR5g6irx9SgI0XIBdxEuqpqUn1er5CIf0olBK3VXtzwNEwDTv8AkDqDvOxw7m9kjkEgDrYs3LmgDpjsg5bgiSrCcfoFx_X_ODp7Q-g5dZLOqYZQxD-bMRy3Uwu97JX-nLqtMLKoY0POhSYX17Y_SH4vFgu9e3I8matifsZAuzKIaT4DFrzyhf_ihi1ffxLnIhYnydMuM27RgrMDNq1EUue1Edym4XUhgxJjKOoiMLg_paJ14l85OXu_M51upCNB4568YKARPVJiT0SCFaA61rYoVOpZaexNLQbxc6kxe0jB5BthCVjU00xpt96QeZPU"; LogUtils.info("開始跳轉首頁..."); url = "http://192.168.1.105/"; GetMethod httpget = new GetMethod(url); httpget.setRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"); httpget.setRequestHeader("Accept-Encoding", "gzip, deflate"); httpget.setRequestHeader("Accept-Language", "zh-CN,zh;q=0.9"); httpget.setRequestHeader("Cache-Control", "max-age=0"); httpget.setRequestHeader("Connection","Keep-Alive"); httpget.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); httpget.setRequestHeader("Host", "192.168.1.105"); httpget.setRequestHeader("Referer", "http://192.168.1.105/"); httpget.setRequestHeader("Upgrade-Insecure-Requests", "1"); httpget.setRequestHeader("User-Agent", Constants.USER_AGENT); httpget.setRequestHeader("Cookie", cookie);//ltpatoken+sessionid statusCode = httpclient.executeMethod(httpget); if (statusCode == HttpStatus.SC_OK) { responseBody = httpget.getResponseBody(); LogUtils.info("跳轉V成功"+statusCode); } else { responseMsg = String.valueOf("statusCode:"+statusCode); LogUtils.error("跳轉V失敗"+statusCode); return; }
最後訪問目標頁,header中帶上指定內容:cookie
url = "http://192.168.1.105/Problems/HttpRequest"; httpget = new GetMethod(url); httpget.setRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"); httpget.setRequestHeader("Accept-Encoding", "gzip, deflate"); httpget.setRequestHeader("Accept-Language", "zh-CN,zh;q=0.9"); httpget.setRequestHeader("Cache-Control", "max-age=0"); httpget.setRequestHeader("Connection","Keep-Alive"); httpget.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); httpget.setRequestHeader("Host", "192.168.1.105"); httpget.setRequestHeader("Referer", "http://192.168.1.105/"); httpget.setRequestHeader("Upgrade-Insecure-Requests", "1"); httpget.setRequestHeader("Content", "2018");//祕鑰 httpget.setRequestHeader("User-Agent", Constants.USER_AGENT); httpget.setRequestHeader("Cookie", cookie);//ltpatoken+sessionid statusCode = httpclient.executeMethod(httpget); if (statusCode == HttpStatus.SC_OK) { Header[] hlist= httpget.getResponseHeaders(); for(Header h:hlist){ LogUtils.info(h.getName()+":"+h.getValue()); } LogUtils.info("跳轉V成功"+statusCode+responseBody); } else { responseMsg = String.valueOf("statusCode:"+statusCode); LogUtils.error("跳轉V失敗"+statusCode+responseBody); return; }
在控制檯中查看答案便可。session