【问题标题】:How to handle Cookies with Apache HttpClient 4.3如何使用 Apache HttpClient 4.3 处理 Cookie
【发布时间】:2013-10-08 19:49:21
【问题描述】:

我需要在 Java 中实现一系列 HTTP 请求,并决定在 4.3 版本(最新版本)中使用 Apaches HttpClient。

问题是所有这些请求都使用 cookie 进行会话管理,我似乎无法找到访问该 cookie 并将其从请求传递到请求的方法。我使用 curl 的命令类似于:

# Login
curl -c cookies -d "UserName=username&Password=password" "https://example.com/Login"

# Upload a file
curl -b cookies -F fileUpload=@IMG_0013.JPG "https://example.com/File"

# Get results of server processing file
curl -b cookies "https://example.com/File/1234/Content"

它们完美地工作。但是,使用 HttpClient 似乎不起作用。我尝试的是:

    URI serverAddress = new URI("https://example.com/");

    URI loginUri = UriBuilder.fromUri(serverAddress).segment("Login").queryParam("UserName", "username")
            .queryParam("Password", "password").build();

    RequestConfig globalConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.BEST_MATCH).build();
    CookieStore cookieStore = new BasicCookieStore();
    HttpClientContext context = HttpClientContext.create();
    context.setCookieStore(cookieStore);

    CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(globalConfig).setDefaultCookieStore(cookieStore).build();
    HttpGet httpGet = new HttpGet(loginUri);
    CloseableHttpResponse loginResponse = httpClient.execute(httpGet,context);

    System.out.println(context.getCookieStore().getCookies());

最后一行的输出总是一个空列表。我认为它应该包含我的 Cookie,对吗?

谁能给我一个关于如何使用 Apache HttpClient 4.3 处理 cookie 的小例子?

谢谢

【问题讨论】:

  • 什么是UriBuilder?在 Apache Commons 中,我看到 URIBuilder(大写 R 和 I)。
  • 这是 6 年前的事了。我不知道我用这个做什么了。如果 URIBuilder 而不是 UriBuilder 适合您,请继续。

标签: java apache cookies curl apache-httpclient-4.x


【解决方案1】:

您的代码对我来说看起来不错(除了不释放资源,但我认为为简洁起见省略了异常处理)。 cookie 存储为空的原因可能是目标服务器违反了实际的 cookie 策略(在您的情况下为 BEST_MATCH)。因此,服务器发送的 cookie 被视为无效而被拒绝。您可以按照here 所述打开上下文/线路日志记录,以了解是否是这种情况(以及其他有用的上下文详细信息)。

【讨论】:

  • 谢谢。那非常有帮助。我想我发现凭据实际上是使用 POST 请求和 POST 参数传输的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
  • 2011-09-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
相关资源
最近更新 更多