如何处理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())); }
希望它有帮助!