小编Jso*_*son的帖子

Android DefaultHttpClient HttpResponse缺少Set-Cookie头字段

我有一个服务器使用spring security remember-me-authentication,我在POST方法中使用Android DefaultHttpClient登录.我能够成功登录甚至能够检索创建的会话cookie(在我的情况下,jsessionid cookie和spring security记住我的cookie).

但奇怪的是在执行POST方法之后

mResponse = mDefaultHttpClient.execute(mHttpPost)
Run Code Online (Sandbox Code Playgroud)

我能够检索cookie,但只能在我的DefaultHttpClient中使用getCookieStore方法

mDefaultHttpClient.getCookieStore()
Run Code Online (Sandbox Code Playgroud)

不使用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());
Run Code Online (Sandbox Code Playgroud)

我在这里得到一些标题(服务器,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: …
Run Code Online (Sandbox Code Playgroud)

android httpclient

6
推荐指数
1
解决办法
3960
查看次数

标签 统计

android ×1

httpclient ×1