Java 检索cookie并在后续POST请求中发送它

Java 检索cookie并在后续POST请求中发送它,java,http,cookies,Java,Http,Cookies,我想从一个网站上读取两个数字(随机生成),然后使用它们来计算结果,然后使用POST请求提交结果。为此,我还需要提交该会话的cookie,以便系统知道在该特定会话中生成的随机数 为了读取数字,我使用了Jsoup: Document document = Jsoup.parse(Jsoup.connect("http://website.com/getNumbers").get().select("strong").text()); String[] numbers = document.text(

我想从一个网站上读取两个数字(随机生成),然后使用它们来计算结果,然后使用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=新的HttpPost(“http://website.com/submitAnswer");
列表参数=新的ArrayList(1);
参数添加(新的BasicNameValuePair(“应答”,应答);
setEntity(新的UrlEncodedFormEntity(参数,“UTF-8”);

阅读文档时如何获取cookie,然后将其用作POST请求的参数?

使用jsoup以以下方式提取cookie:

    Response response = Jsoup.connect("http://website.com/getNumbers").execute();
    Map<String, String> cookies = response.cookies();
    Document document = Jsoup.parse(response.body());
Response-Response=Jsoup.connect(“http://website.com/getNumbersexecute();
映射cookies=response.cookies();
documentdocument=Jsoup.parse(response.body());
使用使用jsoup提取的cookie创建BasicCookieStore。创建包含cookie存储的HttpContext,并在执行下一个请求时传递它

    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);
BasicCookieStore cookieStore=新的BasicCookieStore();
对于(条目cookieEntry:cookies.entrySet()){
BasicClientCookie=新的BasicClientCookie(cookieEntry.getKey(),cookieEntry.getValue());
cookie.setDomain(“.example.com”);
cookie.setPath(“/”);
cookieStore.addCookie(cookie);
}
HttpContext localContext=新的BasicHttpContext();
setAttribute(HttpClientContext.COOKIE_存储,cookieStore);
HttpPost HttpPost=新的HttpPost(“http://website.com/submitAnswer");
列表参数=新的ArrayList(1);
参数添加(新的BasicNameValuePair(“应答”,应答);
setEntity(新的UrlEncodedFormEntity(参数,“UTF-8”);
执行(httpPost,localContext);

发送您的第一个请求,如下所示:-

Response res = Jsoup.connect("login Site URL")
        .method(Method.GET)
        .execute();
 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);
现在获取cookies并发送新请求,cookies如下所示:-

Response res = Jsoup.connect("login Site URL")
        .method(Method.GET)
        .execute();
 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);

感谢您的回复。我如何将参数
answer
传递给请求?方法与您之前所做的相同。没有更改…我已更新了答案以包含它。谢谢。另一个问题:
cookie.setDomain(.example.com”);cookie.setPath(“/”)
我应该向这些方法传递什么值?如果您正在调用
http://website.com/submitAnswer
,然后使用
cookie.setDomain(“.website.com”);cookie.setPath(“/”;