Java HTTP url的基本身份验证中的IOException

Java HTTP url的基本身份验证中的IOException,java,basic-authentication,Java,Basic Authentication,我使用JAVA代码使用用户名:密码点击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";

我使用JAVA代码使用用户名:密码点击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();
    }
}
但我有一个错误

java.io.IOException:服务器返回了URL:

如果我使用curl点击相同的url,那么它将返回响应。下面是curl命令

旋度-u abc001:abc100


请帮助我解决此问题。

您获得的代码是HTTP
401 Unauthorized
,这意味着服务器没有正确解释您的基本身份验证

既然您说带有您展示的基本身份验证的
curl
命令正在工作,那么我假设问题出在您的代码中

看起来你想跟着我

我能看到的唯一错误(但我无法确定是否测试)是,您只是将
字节[]
强制转换为
字符串,而不是使用
Base64
对其进行编码

所以你应该改变这个:

String authStringEnc=新字符串(authEncBytes)

对此:

String authStringEnc=Base64.getEncoder().encodeToString(authEncBytes)

另外,您要更改此:

byte[]authEncBytes=Base64.encodeBase64(authString.getBytes())

对此:

byte[]authEncBytes=authString.getBytes()


byte[]authEncBytes=authString.getBytes(StandardCharsets.UTF_8)

我在StandardCharsets.UTF_8上遇到错误。我导入了java.io.IOException,但在UTF_8上出错。在这种情况下,您可以只获取字符串的字节,而不指定字符集。请参阅我的最新答案。