【发布时间】:2011-09-26 08:09:08
【问题描述】:
我有一个使用 spring security remember-me-authentication 的服务器,我在 POST 方法中使用 Android DefaultHttpClient 登录到该服务器。 我能够成功登录,甚至能够检索创建的会话 cookie(在我的例子中是 jsessionid cookie 和 spring security 记住我的 cookie)。
但奇怪的是在执行POST方法之后
mResponse = mDefaultHttpClient.execute(mHttpPost)
我可以检索 cookie,但只能在我的 DefaultHttpClient 中使用 getCookieStore 方法,例如
mDefaultHttpClient.getCookieStore()
不使用 HttpResponse 对象的 getAllHeaders 方法
headers = mResponse.getAllHeaders();
HeaderIterator headerIterrator = new BasicHeaderIterator(headers, null);
while (headerIterrator.hasNext()) {
Header header = headerIterrator.nextHeader();
headerStringBuilder.append(" " + header.getName() + ":" + header.getValue());
}
Log.e("Post response headers: ", headerStringBuilder.toString());
我在这里得到了一些标头(服务器、X-powered-By、日期、内容类型、内容长度),但没有 Set-Cookie 标头或其他一些标头(Access-control-Allow-* 等)
感谢您的帮助!
更新:看起来 DefaultHttpClient 没有公开某些标头。我尝试添加响应拦截器(如下所示)并且 getAllHeaders 返回了我想要的所有标头。感谢您阅读我的问题!
mDefaultHttpClient.addResponseInterceptor(new HttpResponseInterceptor() {
public void process(final HttpResponse response, final HttpContext context)
throws HttpException, IOException {
Header[] headers = response.getAllHeaders();
for (int i = 0; i < headers.length; i++) {
Header header = headers[i];
Log.e("HTTP: ", "name: " + header.getName());
Log.e("HTTP: ", "value: " + header.getValue());
}
}
});
【问题讨论】:
-
您可以在这里尝试我的问题中的示例:stackoverflow.com/questions/3858593/… 看看您是否遇到同样的问题
-
@Blundell ,感谢您的评论,是的,我尝试了该示例,但返回的标题集与上述相同。
-
我认为在实际请求期间会填充一些标头,尤其是那些生命周期可能有限的标头。
-
出于好奇,为什么需要读取cookie?它将在您的下一个请求时自动设置(如果您不销毁实例)
标签: android httpclient