使用 HttpUrlConnection 抢占式基本身份验证?

使用 HttpUrlConnection 的抢占式基本 http 身份验证的最佳方法是什么?(假设我现在不能使用HttpClient)。

编辑以进行澄清:我使用Base64编码在请求标头中正确设置un / pw。是否需要设置任何其他标志或属性,或者我正在为请求设置基本身份验证标头,这是否是抢占式基本身份验证所需的全部内容?


答案 1

如果您使用的是 Java 8 或更高版本,则 可用:java.util.Base64

HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
String encoded = Base64.getEncoder().encodeToString((username+":"+password).getBytes(StandardCharsets.UTF_8));  //Java 8
connection.setRequestProperty("Authorization", "Basic "+encoded);


然后正常使用连接。

如果您使用的是 Java 7 或更低版本,则需要一种方法将字符串编码为 Base64,例如:

byte[] message = (username+":"+password).getBytes("UTF-8");
String encoded = javax.xml.bind.DatatypeConverter.printBase64Binary(message);

是的,这就是使用基本身份验证所要做的一切。上面用于设置 Request 属性的代码应在打开连接后立即完成,并在获取输入或输出流之前完成。


答案 2

顺便说一句,如果其他人遇到同样的情况,如果您使用并执行,则也会出现Android问题。你需要做并得到一个byte[],然后构造字符串。org.apache.commons.codec.binary.Base64Base64.encodeBase64String()Base64.encodeBase64()

这让我完全措手不及,这两种方法之间的线结束的结果会有所不同。


推荐