我有一个当前正在运行的 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。有任何想法吗?
1 回答
蛊毒传说
TA贡献1895条经验 获得超3个赞
检查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 会自动做到这一点。
添加回答
举报
0/150
提交
取消