如何处理HTTP身份validation使用HttpURLConnection?

我正在写一个Java客户端,POST到需要validation的HTTP服务器。
我必须至less支持以下三种身份validation方法:基本,摘要或协商。 此外,POST可能非常大(超过2MB),所以我需要使用stream式传输。 正如HttpURLConnection所logging的那样

当启用输出stream时,authentication和redirect不能自动处理。 读取响应时,如果需要validation或redirect,则会引发HttpRetryException。

所以,我需要自己处理身份validation。 我search了一遍,再次search,find了一种方法来使用已经编码好的类,但是却找不到方法…

我可以从这里采摘所需的源代码(因为它们是带有Classpathexception的GPLv2)。 这是正确的吗?

谢谢。

你需要输出stream吗? HttpURLConnection绝对支持Authenticator类的Authenticator ,请参阅: Http Authentication 。

更新:如果Authenticator器不是一个选项,您可以手动进行HTTP基本身份validation,为您的HTTP请求添加一个额外的头。 尝试下面的代码(未经testing):

 String userPassword = username + ":" + password; String encoding = new sun.misc.BASE64Encoder().encode(userPassword.getBytes()); URLConnection uc = url.openConnection(); uc.setRequestProperty("Authorization", "Basic " + encoding); uc.connect(); 

关于@ Mat的评论:

这是我的团队和我使用的一个例子:

 import org.apache.commons.codec.binary.Base64; HttpGet getRequest = new HttpGet(endpoint); getRequest.addHeader("Authorization", "Basic " + getBasicAuthenticationEncoding()); private String getBasicAuthenticationEncoding() { String userPassword = username + ":" + password; return new String(Base64.encodeBase64(userPassword.getBytes())); } 

希望它有帮助!