将XML传递到URL

时间:2017-09-27 16:17:56

标签: java xml unirest

我试图将一些XML传递给我正在调用的服务的URL,但是当我运行它时,它会给我一个IllegalArgumentException

response = Unirest.post(appSettings.getURL() + "&service=test&xml=<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><test><cid>blah</cid><pw>blah</pw></test>")

这是错误:

java.lang.IllegalArgumentException: Illegal character in query at index 108: http://test&service=test&xml=%3C?xml version="1.0" encoding="UTF-8" standalone="no"?><test><cid>blah</cid><pw>blah</pw></test>

我认为这与XML如何被读入有关,但我无法弄清楚究竟是什么。

1 个答案:

答案 0 :(得分:3)

空格在URL中转义为%20,其他非字母数字字符可能会出现问题。尝试使用UrlEncoder http://docs.oracle.com/javase/8/docs/api/java/net/URLEncoder.html对网址参数进行编码:

Unirest.post(appSettings.getURL() + "&service=test&xml=" + URLEncoder.encode("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><test><cid>blah</cid><pw>blah</pw></test>", "UTF-8"))

您还可以尝试URIBuilder https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/client/utils/URIBuilder.html或其他方法Java URL encoding of query string parameters

XML具有斜杠字符和问号,它们是URL参数语法的自然部分,但据说这不是问题。由于我们讨论的是REST,您是否不能将XML信息作为请求(或响应)的JSON有效负载的一部分传递?

对于通用(偶数二进制)URL参数,我可以成像的一个hack是Base64编码你要传递的有效负载(在这种情况下是XML),把它放在URL中,另一端你可以对它进行Base64解码。

另请注意,出于安全原因(阻止可能通过大量URL操作的Web相关漏洞),浏览器,HTTP服务器和框架会强制URL的最大长度。它位于1-2千字节的大球场内,因此您没有太多的XML数据空间。