将XML传递到URL

问题描述 投票:0回答:1

我正在尝试将一些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如何被读入有关,但我无法确定究竟是什么。

java xml unirest
1个回答
3
投票

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

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数据空间。

© www.soinside.com 2019 - 2024. All rights reserved.