使用Java创建http请求而不修改全局状态

时间:2017-08-07 22:13:43

标签: java http url cookies http-authentication

假设我想用Java发出HTTP请求。我以为我可以做new URL("http://example.com").openConnection()之类的事情。似乎对于简单的事情,我确实可以做到这一点。但是,我已经遇到过两个案例,我已经知道如何在不修改全局状态的情况下做到这一点。如果我严重误读了文档,我希望有人纠正我。

  1. 假设我想使用HTTP身份验证。我希望能够使用标准URL语法来处理这些事情:http://user:pass@example.com。这似乎不起作用,显然我应该拨打Authenticator.setDefault。如果我控制程序中的所有代码,这是实用的,但完全不适合通用库代码。
  2. 假设网站可能设置了Cookie。默认情况下,它将进入全局流程范围的cookie jar。同样,这是图书馆的粗鲁行为。我可以通过调用CookieHandler.setDefault来更改此行为,但这会再次修改全局状态。
  3. 我做错了什么?

1 个答案:

答案 0 :(得分:1)

  1. 对于基本身份验证,您可以为每个请求设置身份验证标头,首先base64对user:password字符串进行编码,然后将字符串设置为请求标头:

    urlConnection.setRequestProperty("Authorization", "Basic " + encodedAuthStr);

  2. 对于Cookie,您可以暂时将Cookie策略设置为ACCEPT_NONE,并从响应标头中获取set-cookie标头,恢复Cookie策略,并使用Cookie字符串:

    urlConnection.setRequestProperty("Cookie", cookieStr);