当前位置: 首页 > 知识库问答 >
问题:

java.io。IOException:服务器返回了URL的HTTP响应代码:400:

高溪叠
2023-03-14

我正在做一个GET请求,这段代码适用于我们所有现有的测试,对于一个新endpoint,它给出了400个错误。我可以在《邮差》中很好地达到终点。conn.getErrorStream()不打印任何内容。代码似乎在url.openConnection处失败(没有引发异常)。如果我在那行之后执行conn.getResponseCode(),它返回400。我想可能它不喜欢查询中的管道字符,而是通过URLEncoder对其进行编码。encode(resourceContext)以及URLEncoder。encode(baseUrl resourceContext)没有帮助,最终引发了MalformedURLException。以下是我想要点击的endpoint(匿名):https://usqa0003d.usa.company.com:17462/positions/1535000400000/CUR/USA|415 | 415 | CUST | GL53I7TPYBYM |匹配

当我将调试器连接到服务器时,我想什么都不发生,所以请求永远不会到达服务器。我进入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())));

共有1个答案

张啸
2023-03-14

事实上,是“|”字符引起了麻烦。如果我执行以下操作:

        String urlString = (baseUrl + resourceContext).replace("|", "%7C");
        URL url = new URL(urlString);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

它起作用了。生成以下URL字符串:https://usqa0003d.usa.company.com:17462/positions/1535000400000/CUR/USA|415 | 415 | CUST | GL53I7TPYBYM |匹配

但是,当我这样做时:

String enc = baseUrl + URLEncoder.encode(resourceContext);

我得到:https://clqa0003d.usa.company.com:17462/positions/1535000400000/CUR/USA|415|415|CUST|GL53I7TPYBYM|匹配

“/”被替换为“/”(除了管道字符之外),并且由于某种原因导致了问题。作为参考,endpoint实际上是这样定义的:

@RequestMapping(value = "/{param1}/{param2}/{param3:.*}", method = RequestMethod.GET)

类级endpoint(如何称为???)为:

@RequestMapping(value = "/positions",
    produces = {"application/vnd.cme.cdo+json", "application/json;class=true", "application/x-protobuf", "application/x-protobuf-text"},
    consumes = {"application/vnd.cme.cdo+json", "application/json;class=true", "application/x-protobuf", "application/x-protobuf-text"})
public class PositionController implements IPositionController {

有人能评论一下为什么将“/”转换为“/”会引起麻烦吗?

 类似资料:
  • 我正在开发一个线程java应用程序,它通过点击url发送sms消息 问题是我在NTLM代理服务器后面,我搜索了一天的大部分时间,尝试了许多解决方案,但没有成功。应用程序给出了标题错误,当我试图打印错误响应时,我发现错误页面来自代理服务器 这是击打密码 我得到了喘息的机会 任何帮助都很感激谢谢

  • 我得到这个错误: java。木卫一。IOException:服务器为URL返回了HTTP响应代码400:https://graph.facebook.com/search?q=java 对于这个代码: 我不明白为什么?

  • 我的肥皂API在localHost上运行。当我从浏览器或肥皂用户界面访问它时,它工作正常。但是当我从我的java客户端访问它时,它会抛出500个错误 我试图调试代码,但找不到任何东西。服务器日志也不会打印任何内容。只有tomcat访问日志显示请求的响应代码 例外:java。木卫一。IOException:服务器为URL返回了HTTP响应代码500:http://10.142.240.103:808

  • 我可以访问网站kissmanga.com但我不能通过程序访问它。我修正了错误403,我之前得到的,但现在我得到错误503。 好的,这段代码可以解决一个小问题。我没有得到完整的html,但只有2/3。

  • 问题内容: 我想从URL打开一个链接:“ http://www.kohls.com/search.jsp?search=jacket&submit- search=web-regular ”,有时我得到: java.io.IOException:服务器返回URL的HTTP响应代码:403。但是使用浏览器打开网址是可以的。以下是我的代码的一部分: 错误详情 线程“主”中的异常java.io.IOEx

  • 问题内容: 我正在尝试从URL获取InputStream。可以从Firefox打开URL。它返回一个json,并且我已经安装了一个插件以在Firefox中查看json,因此我可以在其中查看它。 所以我尝试通过以下方式从Java获取它: 但是它在urlConnection.getInputStream()中抛出IOException。 我也尝试过: 但是没有运气。 任何信息都是可观的。提前致谢。 问