HTML结果被编码

时间:2014-08-29 06:10:13

标签: java html

考虑一下使用HTML和Java的新手。如果您能查看我的问题并提供任何建议,我将不胜感激。我基本上是按顺序尝试以下操作:

1)使用 PostMethod 类通过Java中的POST方法发送HTTP请求。

2)获取结果。我收到的结果是HTML格式

3)实际结果包含", ;, :等字符。所有引号都转换为结果中的实体(& quot)(htmlOutput字符串)

我的问题如下。如何避免获取编码结果。有没有一种好方法可以将结果作为不包含实体(& quot)的原始字符串?以下是我使用的代码。

        int statusCode = HttpStatus.SC_OK;
        String scriptOutput = "";   
        PostMethod runnerMethod = new PostMethod(url);
        try {
            runnerMethod.setRequestHeader("X-Forwarded-For", LOCAL_MACHINE_IP);
            runnerMethod.addParameter("script", serializedScript);      
            statusCode = client.executeMethod(runnerMethod);
            if (statusCode != HttpStatus.SC_OK) {
                scriptOutput = "HTTP Post request failed with statusCode" + statusCode + 
                                runnerMethod.getStatusText();
                throw new Exception(scriptOutput);
            }
            String htmlOutput = runnerMethod.getResponseBodyAsString();
            scriptOutput = StringUtils.substring(htmlOutput, StringUtils.indexOf(htmlOutput,"Script:") + 8, StringUtils.indexOf(htmlOutput, "<BR/>"));            

            return scriptOutput;
        } catch (IllegalArgumentException e) {
            String errMsg = String.format("Error during Background script execution on instance. opId = %s, instanceUrl = %s, HTTP Status Code = %d, Err Message = %s",
                                          opId, instanceUrl, statusCode, e.getMessage());          
            return errMsg;            
        }
        catch (Exception e)
        {
            String errMsg = String.format("Error during Background script execution on instance. opId = %s, instanceUrl = %s, HTTP Status Code = %d, Err Message = %s",
                                          opId, instanceUrl, statusCode, e.getMessage());            
return errMsg;
        }
        finally {
            runnerMethod.releaseConnection();
        }

输出样本如下:

enter image description here

1 个答案:

答案 0 :(得分:1)

您所做的是发布到HTTP服务器。我认为你使用的是Apache Commons HTTPClient。 getResponseBodyAsString()方法中没有任何内容可以转义HTML实体的引号。

可能你试图发送一个双JSON编码的对象(因此它首先被编码为通常的表示形式,然后是服务器端的JSON字符串,这将解释实体)。

正确的解决方案是摆脱双重编码。如果您不控制服务器端,则可以使用.replaceAll("&quot;", "\"")或使用Apache Commons StringEscapeUtils as explained elsewhere on StackOverflow