Я собираюсь использовать okhttp3 для имитации запроса веб-страницы. В первый раз, когда я захожу на домашнюю страницу веб-сайта, я получаю сеанс, а затем использую сеанс для имитации почтового запроса, и когда я несу данные формы, я обнаруживаю, что функция недействительна, и возвращаюсь на домашнюю страницу веб-сайт. Когда я использую свой браузер, чтобы открыть веб-сайт и вставить сессию в мой код, это работает. Я просто заменил сеанс, и больше ничего не изменилось.
//1.获取session
String userAgent = req.getHeader("User-Agent");
OkHttpClient clientSession=new OkHttpClient();
Request requestSession = new Request.Builder()
.url("http://www.****.com")// Website home page
.addHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9")
.addHeader("Accept-Language:","zh-CN,zh;q=0.9")
.addHeader("Connection","keep-alive")
.addHeader("Host","www.****.com")
.addHeader("User-Agent",userAgent)
.build();
okhttp3.Call callSession = clientSession.newCall(requestSession);
// 执行GET请求,并在异步回调中处理请求
Response responseSession = callSession.execute();
Headers headers = responseSession.headers();
List<String> jsessionid = headers.values("Set-Cookie");
String setCookie = jsessionid.get(0);
String jession = setCookie.substring(setCookie.indexOf("=") + 1 , setCookie.indexOf(";"));
//请求 body
okhttp3.RequestBody body =new FormBody.Builder()
.addEncoded("content1",formDate.getContent1())
.addEncoded("content",formDate.getContent())
.build();
System.out.println(body);
OkHttpClient client=new OkHttpClient();
Request request = new Request.Builder()
.url(surl+"&pageType="+pageType + "&quickSearchEncode="+quickSearchEncode)
// .addHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9")
.addHeader("Connection","keep-alive")
.addHeader("Accept-Language", "zh-CN,zh;q=0.9")
.addHeader("Host","www.****.com")
.addHeader("User-Agent",userAgent)
.addHeader("Origin","http://www.****.com")
.addHeader("Referer","http://www.****.com/")
.addHeader("Cookie","JSESSIONID="+jession)
.post( body)
.build();
okhttp3.Call call = client.newCall(request);
// 执行 post 请求
Response response = call.execute();
System.out.println("code:" + response.code());
System.out.println("message:" + response.message());
ServletOutputStream outputStream = resp.getOutputStream();
resp.setContentType("text/html;charset=utf‐8");
String string = response.body().string();
outputStream.write(string.getBytes("utf-8"));