【问题标题】:How to make several HTTP requests using the same session如何使用同一个会话发出多个 HTTP 请求
【发布时间】:2015-09-28 16:23:36
【问题描述】:

如何在 Java 中发出多个 HTTP 请求来组成一个会话(因此,共享同一组 cookie 等)?

我想通过 POST 请求在一个站点上进行授权,然后使用所有 cookie 和会话数据向该站点发出 GET 请求。

有可能吗?如果有几种可能的方法来实现这种行为,那么其中最好的方法是什么?顺便说一句,同步调用在我的情况下是可以的。

提前致谢。

【问题讨论】:

  • 会话通常由 cookie 跟踪,因此您需要在初始响应中从 Set-Cookie 标头中收集 cookie,然后在后续请求中将它们传递到 Cookie 标头中。
  • @blm 是标准库中最好的解决方案吗?我应该手动完成还是有像CookieManager 这样的内置类或类似的东西?
  • 对于小型项目,我只使用标准的 CookieManager、HttpCookie 和 Http[s]UrlConnection 类。对于较大的项目,Apache 有一些库可以为您处理很多问题,但标准 Java 类非常好。
  • @blm 你能给我一个CookieManager的例子吗?那我就接受你的回答
  • 我只添加了一条评论,因为我没有时间发布我认为完整的答案。 javadocs 非常清楚,所以我建议尝试从 javadocs 中让它工作,如果你仍然有问题,发布你想出的代码,以及它在做什么与你期望和想要的做。

标签: java http cookies


【解决方案1】:

我会使用一个 http 客户端来为你做这件事。例如。 Apache Commons:

https://hc.apache.org/httpcomponents-client-ga/tutorial/html/statemgmt.html#d5e585

如果您仍想自己实现,请查看CookieHandlerCookieManager。基本上:

CookieHandler.setDefault(new CookieManager());

会成功的。

【讨论】:

  • 有没有办法通过标准库做到这一点?其实我不想在这个项目中使用第三方库只是为了 HTTP 请求
  • 当然可以。但是,相信我,你迟早会需要池化、身份验证、缓存……而你可以通过使用第三方库免费获得所有这些。如果您仍然想自己实现它,我已经编辑了答案。
  • @Ruben 不,请不要不要推荐已经死了多年的软件!
  • @Michael-O 抱歉,我发布了旧 apache httpclient 的错误链接。已编辑。
猜你喜欢
  • 2014-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-16
相关资源
最近更新 更多