假设我想用Java发出HTTP请求。我以为我可以做new URL("http://example.com").openConnection()
之类的事情。似乎对于简单的事情,我确实可以做到这一点。但是,我已经遇到过两个案例,我已经知道如何在不修改全局状态的情况下做到这一点。如果我严重误读了文档,我希望有人纠正我。
http://user:pass@example.com
。这似乎不起作用,显然我应该拨打Authenticator.setDefault
。如果我控制程序中的所有代码,这是实用的,但完全不适合通用库代码。CookieHandler.setDefault
来更改此行为,但这会再次修改全局状态。我做错了什么?
答案 0 :(得分:1)
对于基本身份验证,您可以为每个请求设置身份验证标头,首先base64对user:password
字符串进行编码,然后将字符串设置为请求标头:
urlConnection.setRequestProperty("Authorization", "Basic " + encodedAuthStr);
对于Cookie,您可以暂时将Cookie策略设置为ACCEPT_NONE,并从响应标头中获取set-cookie标头,恢复Cookie策略,并使用Cookie字符串:
urlConnection.setRequestProperty("Cookie", cookieStr);