如何通过 Apache HttpClient 执行以 xml 数据作为查询参数的 url?
How to execute url which has xml data as query parameter through Apache HttpClient?
我有一个如下所示的 XML,它作为字符串存储在 xmlData
变量中,我需要将此字符串传递给 client_data
变量中的 url -
<?xml version="1.0"?>
<ClientData
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.google.com model.xsd"
xmlns="http://www.google.com">
<client id="100">
<clock>
<for>
<etc>val(tery) = 1</etc>
<while><![CDATA[val(tery) < 20]]></while>
</for>
</clock>
</model>
</ClientData>
下面是 URL 我正在通过 URL 编码 client_data
值访问浏览器以获得响应,它工作正常。
http://localhost:8080/test_tmp?max_time=30&users=1000&client_data=<?xml version="1.0"?>
<ClientData
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.google.com model.xsd"
xmlns="http://www.google.com">
<client id="100">
<clock>
<for>
<etc>val(tery) = 1</etc>
<while><![CDATA[val(tery) < 20]]></while>
</for>
</clock>
</model>
</ClientData>
现在我需要通过 Apache HttpClient
做同样的事情。执行此操作的最佳方法是什么?
我得到了以下代码,但不确定是否有更好的方法来做到这一点?有什么我可以改进的地方或更好的方法吗?
public static void main(String[] args) {
String xmlData = getXMLData();
String url = generateURL(xmlData);
HttpClient httpclient = HttpClientBuilder.create().build();
HttpGet request = new HttpGet(url);
HttpResponse httpResponse = httpclient.execute(request);
BufferedReader rd = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));
StringBuffer response = new StringBuffer();
String line = "";
while ((line = rd.readLine()) != null) {
response.append(line);
}
// prints response
System.out.println(response);
}
private static String generateURL(final String clientData) {
StringBuilder url = new StringBuilder();
url.append("http://localhost:8080/test_tmp?max_time=30&users=1000&client_data=");
url.append(URLEncoder.encode(clientData, "UTF-8"));
return url.toString();
}
老实说,我认为您不想尝试通过您的 URI 传递 XML。有几件事需要考虑。第一,一些服务器会阻止长 URI(Google 第一个结果:http://www.checkupdown.com/status/E414.html)。接下来,您可能想要 "encode" URI,以便它转义所有尚未准备好以原始方式传递的字符。
考虑对 HTTP 消息的 xml 主体执行 "POST"。
希望对您有所帮助。
我有一个如下所示的 XML,它作为字符串存储在 xmlData
变量中,我需要将此字符串传递给 client_data
变量中的 url -
<?xml version="1.0"?>
<ClientData
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.google.com model.xsd"
xmlns="http://www.google.com">
<client id="100">
<clock>
<for>
<etc>val(tery) = 1</etc>
<while><![CDATA[val(tery) < 20]]></while>
</for>
</clock>
</model>
</ClientData>
下面是 URL 我正在通过 URL 编码 client_data
值访问浏览器以获得响应,它工作正常。
http://localhost:8080/test_tmp?max_time=30&users=1000&client_data=<?xml version="1.0"?>
<ClientData
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.google.com model.xsd"
xmlns="http://www.google.com">
<client id="100">
<clock>
<for>
<etc>val(tery) = 1</etc>
<while><![CDATA[val(tery) < 20]]></while>
</for>
</clock>
</model>
</ClientData>
现在我需要通过 Apache HttpClient
做同样的事情。执行此操作的最佳方法是什么?
我得到了以下代码,但不确定是否有更好的方法来做到这一点?有什么我可以改进的地方或更好的方法吗?
public static void main(String[] args) {
String xmlData = getXMLData();
String url = generateURL(xmlData);
HttpClient httpclient = HttpClientBuilder.create().build();
HttpGet request = new HttpGet(url);
HttpResponse httpResponse = httpclient.execute(request);
BufferedReader rd = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));
StringBuffer response = new StringBuffer();
String line = "";
while ((line = rd.readLine()) != null) {
response.append(line);
}
// prints response
System.out.println(response);
}
private static String generateURL(final String clientData) {
StringBuilder url = new StringBuilder();
url.append("http://localhost:8080/test_tmp?max_time=30&users=1000&client_data=");
url.append(URLEncoder.encode(clientData, "UTF-8"));
return url.toString();
}
老实说,我认为您不想尝试通过您的 URI 传递 XML。有几件事需要考虑。第一,一些服务器会阻止长 URI(Google 第一个结果:http://www.checkupdown.com/status/E414.html)。接下来,您可能想要 "encode" URI,以便它转义所有尚未准备好以原始方式传递的字符。
考虑对 HTTP 消息的 xml 主体执行 "POST"。
希望对您有所帮助。