Java 检索cookie并在后续POST请求中发送它
我想从一个网站上读取两个数字(随机生成),然后使用它们来计算结果,然后使用POST请求提交结果。为此,我还需要提交该会话的cookie,以便系统知道在该特定会话中生成的随机数 为了读取数字,我使用了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(
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(“/”;