在下面的代码中,我在网站上运行发布请求。我不明白为什么cookie通过cookiemanager显示,但它没有出现在POST标题中。请参阅我在代码中的评论。
有人可以解释我错过的内容吗?
CookieManager cm = new CookieManager(null, CookiePolicy.ACCEPT_ALL);
CookieHandler.setDefault(cm);
...
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
OutputStream outputStream = connection.getOutputStream();
outputStream.write(urlParams.getBytes(charset));
// Clear cookies to prove they are not from an old request.
cm.getCookieStore().removeAll();
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK)
throw new Exception("Invalid response code.");
// No cookie prints here:
Log.d("Aero", connection.getHeaderFields().toString());
List<HttpCookie> cookies = cm.getCookieStore().getCookies();
for (HttpCookie cookie : cookies) {
if (cookie.getName().equals("ASP.NET_SessionId")) {
// But we do get a cookie here
Log.d("Aero", cookie.toString());
}
}
答案 0 :(得分:1)
今天早上我头脑清醒,我已经设法自己解决了这个问题。问题是响应是302重定向,重定向页面在响应头中没有cookie。
我需要使用:
connection.setInstanceFollowRedirects(false);
确保我正在读取原始标题的响应,而不是重定向的标题。