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

获取Java . io . io异常错误:使用返回400状态代码的url时,服务器为URL:返回HTTP响应代码:400

黄正浩
2023-03-14

我正在尝试使用以下代码使用 Groovy 执行 get 请求:

String url = “url of endpoint” def responseXml = new XmlSlurper().parse(url)

如果endpoint返回的状态为200,则一切正常,但有一种情况,我们必须验证如下所示的错误响应,返回的状态为400:

    <errors>
    <error>One of the following parameters is required: xyz, abc.</error>
    <error>One of the following parameters is required: xyz, mno.</error>
    </errors>

在这种情况下,parse方法抛出:


    java.io.IOException: Server returned HTTP response code: 400 for URL: "actual endpoint throwing error"
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1900)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1498)
        at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:646)
        at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:150)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:831)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:796)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:142)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
        at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:644)
        at groovy.util.XmlSlurper.parse(XmlSlurper.java:205)
        at groovy.util.XmlSlurper.parse(XmlSlurper.java:271)
    
Can anyone pls suggest how to handle if server give error message by throwing 400 status code?

共有2个答案

赵炯
2023-03-14

HttpURLConnection 类获取响应文本,而不是通过 XmlSlurper 隐式获取响应文本,可以更灵活地处理不成功的响应。尝试这样的事情:

def connection = new URL('https://your.url/goes.here').openConnection()
def content = { ->
    try {
        connection.content as String
    } catch (e) {
        connection.responseMessage
    }
}()

if (content) {
    def responseXml = new XmlSlurper().parseText(content)
    doStuffWithResponseXml(responseXml)
}

更好的方法是使用一个真正的功能齐全的HTTP客户端,比如Spring Framework的Http客户端别说类。

朱鹤轩
2023-03-14

在问题中,因为我们正在为GET请求获取400状态代码。所以内置的XmlSlurper(). parse(URI)方法不起作用,因为它抛出io. Excep。Groovy还支持api请求和响应的HTTP方法,以下方法对我有用:

def getReponseBody(endpoint) {     
    URL url = new URL(endpoint)
    HttpURLConnection get = (HttpURLConnection)url.openConnection()
    get.setRequestMethod("GET")
    def getRC = get.getResponseCode()

    BufferedReader br = new BufferedReader(new InputStreamReader(get.getErrorStream()))
    StringBuffer xmlObject = new StringBuffer()
    def eachLine
    while((eachLine = br.readLine()) !=null){
        xmlObject.append(eachLine)
    }
    get.disconnect()
    return new XmlSlurper().parseText(xmlObject.toString())
}
 类似资料:
  • 我得到这个错误: java。木卫一。IOException:服务器为URL返回了HTTP响应代码400:https://graph.facebook.com/search?q=java 对于这个代码: 我不明白为什么?

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

  • 问题内容: 我试图从桌面应用程序连接到URL,但出现问题标题中指示的错误,但是当我尝试从servlet连接到同一URL时,一切正常。当我从浏览器加载URL时,一切正常。我在servlet中使用相同的代码。该代码在库中,当它不起作用时,我将代码拉到当前项目中的类中,但它不起作用。 网址https://graph.facebook.com/me。 代码片段。 我在这里有些困惑,是否存在某种不是普通桌面

  • 我正在做一个GET请求,这段代码适用于我们所有现有的测试,对于一个新endpoint,它给出了400个错误。我可以在《邮差》中很好地达到终点。conn.getErrorStream()不打印任何内容。代码似乎在url.openConnection处失败(没有引发异常)。如果我在那行之后执行conn.getResponseCode(),它返回400。我想可能它不喜欢查询中的管道字符,而是通过URLE

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

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