【问题标题】:Android DefaultHttpClient HttpResponse missing Set-Cookie header fieldAndroid DefaultHttpClient HttpResponse 缺少 Set-Cookie 标头字段
【发布时间】: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


【解决方案1】:

您是否尝试过使用 HttpURLConnection 而不是 HttpClient? HttpClient,顾名思义,是一个客户端,然后它为你管理cookies,HttpURLConnection没有。

文档说“HTTP 客户端封装了执行 HTTP 请求所需的大量对象,同时处理 cookie、身份验证、连接管理和其他功能。”

【讨论】:

    【解决方案2】:

    如果你在服务器端设置cookie,比如php中的session_start(),Set-Cookie会显示在headers中,但是如果你没有设置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=/
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-14
      • 1970-01-01
      • 2017-08-25
      • 2019-06-01
      • 1970-01-01
      • 2020-09-21
      • 1970-01-01
      • 2021-01-08
      相关资源
      最近更新 更多