将REST Web请求从Python转换为Java

时间:2019-04-09 16:15:54

标签: java python

我有一个正在使用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 个答案:

答案 0 :(得分: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会自动做到这一点。