Получите cookie и отправьте его в последующих запросах POST - PullRequest
0 голосов
/ 28 мая 2018

Я хочу прочитать два числа (сгенерированных случайным образом) с веб-сайта, которые затем используются для вычисления результата, а затем отправить результат с помощью запроса POST.Для этого мне также нужно будет отправить cookie этого сеанса, чтобы система знала о случайных числах, которые были получены в этом конкретном сеансе.

Чтобы прочитать числа, которые я использую Jsoup:

Document document = Jsoup.parse(Jsoup.connect("http://website.com/getNumbers").get().select("strong").text());
String[] numbers = document.text().split(" ");
String answer = methodThatComputesTheDesiredOutput(numbers);

Теперь я хочу отправить запрос POST, который включает answer и cookies этого сеанса.Вот частично реализованный POST-запрос, который включает в себя только один параметр (answer):

HttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://website.com/submitAnswer");
List<NameValuePair> params = new ArrayList<NameValuePair>(1);
params.add(new BasicNameValuePair("answer", answer);
httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));

Как получить cookie при чтении документа, а затем использовать его в качестве параметра POST-запроса?

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Отправьте свой первый запрос, как показано ниже: -

Response res = Jsoup.connect("login Site URL")
        .method(Method.GET)
        .execute();

Теперь получите файлы cookie и отправьте новый запрос с файлами cookie, как показано ниже: -

 CookieStore cookieStore = new BasicCookieStore();
     for (String key : cookies.keySet()) {
        Cookie cookie = new Cookie(key, cookies.get(key));
        cookieStore.addCookie((org.apache.http.cookie.Cookie) cookie);
    }
       HttpClientContext context = HttpClientContext.create();
        context.setCookieStore(cookieStore);
        HttpClient httpClient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost("http://website.com/submitAnswer");
        httpClient.execute(httpPost,context);
0 голосов
/ 28 мая 2018

Извлеките файлы cookie с помощью jsoup следующим образом:

    Response response = Jsoup.connect("http://website.com/getNumbers").execute();
    Map<String, String> cookies = response.cookies();
    Document document = Jsoup.parse(response.body());

Создайте BasicCookieStore, используя файлы cookie, извлеченные с помощью jsoup.Создайте HttpContext, содержащий хранилище cookie, и передайте его при выполнении следующего запроса.

    BasicCookieStore cookieStore = new BasicCookieStore();
    for (Entry<String, String> cookieEntry : cookies.entrySet()) {
        BasicClientCookie cookie = new BasicClientCookie(cookieEntry.getKey(), cookieEntry.getValue());
        cookie.setDomain(".example.com");
        cookie.setPath("/");
        cookieStore.addCookie(cookie);
    }


    HttpContext localContext = new BasicHttpContext();
    localContext.setAttribute(HttpClientContext.COOKIE_STORE, cookieStore);

    HttpPost httpPost = new HttpPost("http://website.com/submitAnswer");
    List<NameValuePair> params = new ArrayList<NameValuePair>(1);
    params.add(new BasicNameValuePair("answer", answer);
    httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));

    httpClient.execute(httpPost, localContext);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...