Java HttpsURLConnection验证两次?
我建立了一个安全的http连接,然后尝试从中获取Java HttpsURLConnection验证两次?,java,http,ssl,Java,Http,Ssl,我建立了一个安全的http连接,然后尝试从中获取InputStream。连接发生,我能够获取数据,但我实际上向服务器发送了两个授权请求??下面是我的代码,它正在获取连接并建立输入流: someConnection = (HttpsURLConnection) url.openConnection(); String userPass = username + ":" + password; String basicAuth = "Basic" + new String(new Base64().
InputStream
。连接发生,我能够获取数据,但我实际上向服务器发送了两个授权请求??下面是我的代码,它正在获取连接并建立输入流:
someConnection = (HttpsURLConnection) url.openConnection();
String userPass = username + ":" + password;
String basicAuth = "Basic" + new String(new Base64().encode(userPass.getBytes()));
someConnection.setRequestProperty("Authorization", basicAuth);
if (header != null) someConnection.setRequestProperty(header, headerValue);
InputStream is = someConnection.getInputStream();
在调用.getInputStream()
方法之前,没有流量。然后我看到两个授权请求:
你知道它为什么这么做吗?由于某种原因,第一个请求似乎失败。在“基本”和base64编码数据之间应该有空格
如果没有此项,则授权标头是错误的。我猜您在第一个请求中收到401,然后发送下一个请求,以及可能从不同来源(JAAS?)获得的其他凭据。您的头
授权的值与预期格式不匹配,它应该是“Basic”
后跟${username}:${password}
使用rfc245-MIME
Base 64的变体编码(更多详细信息)
在这里,您忘记在Basic
之后添加尾随空格,因此身份验证从未正确执行,从而导致此意外行为。尝试在Basic
之后添加空格,将的“Basic”
替换为的“Basic”
,添加空格确实解决了问题,但我想指出,如果没有空格,第二次验证总是正确的。