【问题标题】:Problems with HTTPclient and cookiesHTTPclient 和 cookie 的问题
【发布时间】:2012-03-20 15:38:27
【问题描述】:

我目前正在开发一个移动应用程序,该应用程序将通过 HTTP 协议与 RESTfull 服务器进行通信。为此,我编写了一个工作代码并让通信正常工作。

为了让服务器识别用户,我想使用 cookie(某种会话 cookie)。所以我开始使用以下两个帮助方法来创建一个 HttpClient 和一个上下文(包括我的 cookie)。

// Gets a standard client - set to HTTP1.1
private HttpClient getClient() {
    HttpParams params = new BasicHttpParams();
    params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
    return new DefaultHttpClient(params);
}

// Gets the context with cookies to be used. This is to make each user unique
private HttpContext getHttpContext(String server) {
    CookieStore cookieStore = new BasicCookieStore();
    BasicClientCookie cookie = new BasicClientCookie("X-ANDROID-USER", "some name");
    cookie.setDomain(server);
    cookie.setPath("/");
    cookie.setVersion(1);

    cookieStore.addCookie(cookie);
    HttpContext localContext = new BasicHttpContext();
    localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
    return localContext;
}

然后我使用以下(读取功能)连接到服务器。这基本上需要最后两个辅助方法生成的 Client 和 Conext 并执行正常的 GET 请求。
// 连接restfull服务器并返回返回值(get request)

私有字符串restfullRead(URI uri,字符串服务器) { // 设置读取 HttpRequest 所需的不同对象 HttpClient 客户端 = this.getClient(); HttpGet 请求 = 新的 HttpGet(); request.setURI(uri); HttpContext 上下文 = this.getHttpContext(server); // 连接到服务器并读取响应 尝试 { HttpResponse response = client.execute(request, context); reader.close(); } 捕获(异常 e){ 返回 ””; }

当我将它运行到我的服务器时,我收到以下请求。
获取 /info/1 HTTP/1.1
主机:192.168.0.191:8080
连接:保持活动状态

如您所见,这不包括任何 cookie。这就是为什么我想知道,为什么“getHttpContext”中制作的cookie没有在请求中发送?

【问题讨论】:

  • 为什么不向客户端应用程序发送一个唯一令牌。此令牌标识用户并将随每个请求一起发送到服务器?
  • 可能有点不清楚,代码有点简单——我尝试发送一个名为“X-ANDROID-USER”的cookie,其值为“some name”,以便服务器。当我完成这项工作时,我会将“某个名称”更改为唯一值。

标签: java android apache cookies httpclient


【解决方案1】:

这个答案会对你有所帮助:

How do I make an http request using cookies on Android?

// 编辑

1.) 您的 Android 应用将其唯一的 NFC-Tag 发送到服务器。

2.) 服务器创建一个新的唯一令牌并在令牌和 NFC-Tag 之间建立关系

3.) 每当您的应用发送请求时,也要发送唯一的 NFC-Tag。

4.) 服务器将检查 NFC-Tag 并搜索令牌,现在您的设备已被识别

发送自定义标头:

HttpGet get = new HttpGet(getURL);
get.addHeader("NFC", "YOUR NFC-TAG");
get.addHeader("Some more header", "more infos");

【讨论】:

  • 嗨。感谢您尝试提供帮助。我已经通读了它,它与我正在尝试做的不同。他正在向服务器发出后请求并检索发回的 cookie。虽然我想在我的 android 应用程序上创建一个新的 cookie(具有唯一标识符,从 NFC 标签读取)。我想将此标签作为 cookie 发送。我真的需要向服务器发送一个后请求并让服务器设置cookie吗?
  • 这是我正在尝试做的。我什至制作了饼干并添加到 HttpContext 中。当我提出请求时,我告诉它使用这个上下文。 - 然而,标头从未真正发送。
  • 您可以将 NFC-Tag 作为 GET 参数或作为 Header 发送。 GET 参数应该清楚。我将发布一个发送标题的示例。我要编辑上面的帖子
  • 嘿。感谢您的帮助,这并没有真正解决问题,但它应该可以工作。至少感谢 sfor 的帮助,我想我会坚持将它们作为标题字段发送 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多