考虑一下使用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();
}
输出样本如下:
答案 0 :(得分:1)
您所做的是发布到HTTP服务器。我认为你使用的是Apache Commons HTTPClient。 getResponseBodyAsString()方法中没有任何内容可以转义HTML实体的引号。
可能你试图发送一个双JSON编码的对象(因此它首先被编码为通常的表示形式,然后是服务器端的JSON字符串,这将解释实体)。
正确的解决方案是摆脱双重编码。如果您不控制服务器端,则可以使用.replaceAll(""", "\"")
或使用Apache Commons StringEscapeUtils as explained elsewhere on StackOverflow。