HTTP 基本身份验证中的 IOException url
IOException in Basic Authentication for HTTP url
我正在使用 JAVA 代码通过 username:password 访问 HTTP url。下面是我的代码
public static main (String args[]){
try{
String webPage = "http://00.00.000.000:8080/rsgateway/data/v3/user/start/";
String name = "abc001";
String password = "abc100";
String authString = name + ":" + password;
System.out.println("auth string: " + authString);
byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
String authStringEnc = new String(authEncBytes);
URL url = new URL(webPage);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setUseCaches(true);
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization","Basic " +authStringEnc);
connection.setRequestProperty("Accept", "application/xml");
connection.setRequestProperty("Content-Type", "application/xml");
InputStream is = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
int numCharsRead;
char[] charArray = new char[1024];
StringBuffer sb = new StringBuffer();
while ((numCharsRead = isr.read(charArray)) > 0) {
sb.append(charArray, 0, numCharsRead);
}
String result = sb.toString();
System.out.println("*** BEGIN ***");
System.out.println(result);
System.out.println("*** END ***");
} catch (Exception e) {
e.printStackTrace();
}
}
但是我收到 401 错误
java.io.IOException: Server returned HTTP response code: 401 for URL:
相同 url 如果我使用 curl 命中然后它返回响应。下面是 curl 命令。
curl -u abc001:abc100 http://00.00.000.000:8080/rsgateway/data/v3/user/start/
请帮我解决这个问题。
您获得的代码是 HTTP 401 Unauthorized
,这意味着服务器没有正确解释您的基本身份验证。
既然你说 curl
命令和你显示的基本身份验证是有效的,我假设问题出在你的代码中。
您似乎试图关注 this code.
我能看到的唯一错误(但我无法对此进行测试以确保)是您只是将 byte[]
转换为 String
而不是使用 Base64
对其进行编码。
所以你应该改变这个:
String authStringEnc = new String(authEncBytes);
到这个:
String authStringEnc = Base64.getEncoder().encodeToString(authEncBytes);
另外,你想改变这个:
byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
到这个:
byte[] authEncBytes = authString.getBytes();
byte[] authEncBytes = authString.getBytes(StandardCharsets.UTF_8);
我正在使用 JAVA 代码通过 username:password 访问 HTTP url。下面是我的代码
public static main (String args[]){
try{
String webPage = "http://00.00.000.000:8080/rsgateway/data/v3/user/start/";
String name = "abc001";
String password = "abc100";
String authString = name + ":" + password;
System.out.println("auth string: " + authString);
byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
String authStringEnc = new String(authEncBytes);
URL url = new URL(webPage);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setUseCaches(true);
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization","Basic " +authStringEnc);
connection.setRequestProperty("Accept", "application/xml");
connection.setRequestProperty("Content-Type", "application/xml");
InputStream is = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
int numCharsRead;
char[] charArray = new char[1024];
StringBuffer sb = new StringBuffer();
while ((numCharsRead = isr.read(charArray)) > 0) {
sb.append(charArray, 0, numCharsRead);
}
String result = sb.toString();
System.out.println("*** BEGIN ***");
System.out.println(result);
System.out.println("*** END ***");
} catch (Exception e) {
e.printStackTrace();
}
}
但是我收到 401 错误
java.io.IOException: Server returned HTTP response code: 401 for URL:
相同 url 如果我使用 curl 命中然后它返回响应。下面是 curl 命令。
curl -u abc001:abc100 http://00.00.000.000:8080/rsgateway/data/v3/user/start/
请帮我解决这个问题。
您获得的代码是 HTTP 401 Unauthorized
,这意味着服务器没有正确解释您的基本身份验证。
既然你说 curl
命令和你显示的基本身份验证是有效的,我假设问题出在你的代码中。
您似乎试图关注 this code.
我能看到的唯一错误(但我无法对此进行测试以确保)是您只是将 byte[]
转换为 String
而不是使用 Base64
对其进行编码。
所以你应该改变这个:
String authStringEnc = new String(authEncBytes);
到这个:
String authStringEnc = Base64.getEncoder().encodeToString(authEncBytes);
另外,你想改变这个:
byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
到这个:
byte[] authEncBytes = authString.getBytes();
byte[] authEncBytes = authString.getBytes(StandardCharsets.UTF_8);