HttpUrlConnection:Cookie 显示在 CookieStore 中,但不显示在 POST Header 中
HttpUrlConnection: Cookies Show in CookieStore but not in the POST Header
在下面的代码中,我是 运行 网站上的 post 请求。我不明白的是为什么 cookie 通过 cookiemanager 显示,但它没有显示在 POST header 中。请参阅我在代码中的注释。
有人可以解释一下我缺少什么吗?
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());
}
}
好的,今天早上头脑清醒,我自己设法解决了这个问题。问题是响应是 302 重定向,重定向的页面在响应中没有 cookie header。
我需要使用:
connection.setInstanceFollowRedirects(false);
确保我阅读的是原始 header 而非重定向的回复。
在下面的代码中,我是 运行 网站上的 post 请求。我不明白的是为什么 cookie 通过 cookiemanager 显示,但它没有显示在 POST header 中。请参阅我在代码中的注释。
有人可以解释一下我缺少什么吗?
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());
}
}
好的,今天早上头脑清醒,我自己设法解决了这个问题。问题是响应是 302 重定向,重定向的页面在响应中没有 cookie header。
我需要使用:
connection.setInstanceFollowRedirects(false);
确保我阅读的是原始 header 而非重定向的回复。