О okhttp3 Симуляция доступа к странице - PullRequest
0 голосов
/ 26 февраля 2020

Я собираюсь использовать 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"));
...