为了账号安全,请及时绑定邮箱和手机立即绑定

将 REST webrequest 从 Python 转换为 Java

将 REST webrequest 从 Python 转换为 Java

幕布斯7119047 2022-01-05 10:41:40
我有一个当前正在运行的 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 会自动做到这一点。


查看完整回答
反对 回复 2022-01-05
  • 1 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信