将 REST webrequest 从 Python 转换为 Java

我有一个当前正在运行的 Python 程序,我正在尝试将其转换为 Java。


webCmd = "http://192.168.1.xxx/rest/nodes/21 F1 DD 1/ST"

r = requests.get(webCmd, timeout=(0.1,2), auth=('username', 'password'))  

我是 Java 新手,我的代码失败了。


String authString = "username" + ":" + "password";

String encodedAuth = Base64.getEncoder().encodeToString(authString.getBytes());

String authHeader = "Basic " + encodedAuth;


webCmd = "http://192.168.1.xxx/rest/nodes/21 F1 DD 1/ST";


HttpURLConnection connection = (HttpURLConnection) new URL(webCmd).openConnection();

connection.setRequestProperty ("Authorization", authHeader);

connection.setRequestMethod("GET");


int responseCode = connection.getResponseCode();

如果我运行上面的代码,我会收到 404 错误。如果我将 webCmd 粘贴到浏览器中,它会提示我输入用户名、密码并以正确的 xml 输出响应。如果我注释掉 setRequestProperty 行,那么响应是预期的 401。有任何想法吗?


幕布斯7119047
浏览 170回答 1
1回答

蛊毒传说

检查https://docs.oracle.com/javase/8/docs/api/java/net/URL.html具体来说URL 类本身并不根据 RFC2396 中定义的转义机制对任何 URL 组件进行编码或解码。调用者有责任对需要在调用 URL 之前转义的任何字段进行编码,并解码从 URL 返回的任何转义字段。此外,由于 URL 不知道 URL 转义,因此它无法识别同一 URL 的编码或解码形式之间的等效性。例如,两个 URL:http://foo.com/hello world/ 和 http://foo.com/hello%20world将被视为不相等。您的 URL 包含空格,因此您需要对它们进行显式编码。我猜 Python 会自动做到这一点。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python