如何通过 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"。

希望对您有所帮助。