我有一台服务器使用Spring安全记忆我认证,我在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- * etc)
感谢您的帮助!
更新:看起来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());
}
}
});
答案 0 :(得分:1)
你尝试过使用HttpURLConnection而不是HttpClient吗?顾名思义,HttpClient是一个客户端,然后它为你管理cookie,HttpURLConnection没有。
Doc说“HTTP客户端封装了处理cookie,身份验证,连接管理和其他功能时执行HTTP请求所需的大量对象。”
答案 1 :(得分:0)
如果你在服务器端设置cookie,比如php中的session_start(),那么Set-Cookie会显示在标题中,但如果你没有设置任何cookie,则Set-Cookie没有显示。
后:
05-25 17:23:16.616: I/HTTP:(575): name: Set-Cookie
05-25 17:23:16.616: I/HTTP:(575): value: PHPSESSID=g29i01av8ddvpgsi7lpaj12lc3; path=/