[英]How to get and process an XML Response after making an HTTP Request
我有一个迭代方法,该方法将对URL进行100次调用,然后解析XML响应,并在每次调用后保留数据。
为此,我一直试图仅使用HttpURLConnection来获取响应,将其转换为字符串,然后转换为文档,以便我可以对其进行处理并使用SAX解析我想要的标签/信息。
但是,此方法有时仅适用,中间会出现以下异常:
org.xml.sax.SAXParseException: Content is not allowed in prolog.
问题似乎是XML字符串并非总是正确返回。 而不是像普通的XML标签那样使用介于两者之间的数据:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> </xml>
我得到这样的东西:
{"created":"2019-03-18T13:19:41.484Z","count":3654,"offset":500 ....
该字符串包含我需要的数据,但是由于某种原因,响应似乎并不总是以我需要的形式返回它。 我已经确认这是一个间歇性问题,这意味着我遇到了相同的确切请求,有时收到了期望的答复,而在其他情况下,则收到了不希望的答复。
发出请求的方法
URL url = new URL("Some URL");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setReadTimeout(5000);
connection.setConnectTimeout(5000);
int responseCode = connection.getResponseCode();
if (responseCode != 200) {
log.error("Received an invalid response: " + responseCode);
return;
}
parseXml(convertResponseToXmlString(connection));
connection.disconnect();
将响应转换为字符串的方法
private String convertResponseToXmlString(final HttpURLConnection connection) throws IOException
{
String inputLine;
BufferedReader input = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuffer content = new StringBuffer();
while ((inputLine = input.readLine()) != null)
{
content.append(inputLine);
}
input.close();
return content.toString().trim();
}
非常感谢,您完全正确。 我需要在请求URL中添加一个请求参数,以指定我希望数据以XML形式返回。
奇怪的是,这样的反应千差万别,但是现在已经确定了!
connection.setRequestProperty("Content-Type", "application/xml");
应该有帮助:),否则尝试:
connection.setRequestProperty("Accept", "application/xml");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.