【发布时间】:2018-11-01 16:39:06
【问题描述】:
我正在执行一个 GET 请求,并且此代码适用于我们所有现有的测试,它为新端点提供 400 错误。我可以在邮递员中很好地达到终点。 conn.getErrorStream() 不打印任何内容。代码似乎在 url.openConnection 处失败(没有抛出异常)。如果我在该行之后立即执行 conn.getResponseCode() 它返回 400。我想它可能不喜欢我在查询中的管道字符,而是通过 URLEncoder.encode(resourceContext) 以及 URLEncoder.encode(baseUrl + resourceContext) 没有帮助并最终抛出 MalformedURLException。这是我要访问的端点(匿名): https://usqa0003d.usa.company.com:17462/positions/1535000400000/CUR/USA|415|415|CUST|GL53I7TPYBYM|MATCHED
当我将调试器附加到服务器时,我想什么都没有发生,因此请求永远不会到达服务器。我踏入 openConnection,它通向一个充满 var5、var6 等的兔子洞。我切换到 HttpsURLConnection,但那里也没有骰子。还有其他建议吗?
URL url = new URL(baseUrl + resourceContext);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod(requestType);
if(messageLibraryJson) {
conn.setRequestProperty("Content-Type", "application/json;class=true");
conn.setRequestProperty("Accept", "application/json;class=true");
} else {
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("Accept", "application/json");
}
String userpass = username + ":" + password;
String basicAuth = "Basic " + javax.xml.bind.DatatypeConverter.printBase64Binary(userpass.getBytes());
conn.setRequestProperty("Authorization", basicAuth);
if(requestType.equals("POST")) {
OutputStream os = conn.getOutputStream();
os.write(requestJson.getBytes());
os.flush();
}
if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
logger.error("ERROR in REST CLIENT");
logger.error("URL = " + baseUrl + resourceContext);
logger.error("Request = " + requestJson);
throw new RuntimeException("Failed : HTTP error code : "
+ conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
【问题讨论】: