我有一个从 SMPP 服务器接收消息并将收到的消息转发给用户 Web 服务的应用程序。所有用户在数据库中都有一个这样的 URL:
http://www.example.com/get.php?from=${originator}&to=${destination}&data=${content}
http://www.example.com/submit?origin=${originator}&dst=${destination}&cnt=${content}
他们都有${originator}
, ${destination}
,${content}
在他们的模式。他们的 URL 中可能有其他参数,也可能没有。从数据库获取用户 URL 后,我使用 JoddStringTemplateParser
替换上述参数:
private StringTemplateParser stp = new StringTemplateParser();
private final Map<String, String> args = new HashMap<>();
args.put("originator", msg.getOriginator());
args.put("destination", msg.getDestination());
args.put("content", msg.getContent());
String result = stp.parse(deliveryUrl, new MacroResolver() {
@Override
public String resolve(String macroName) {
return args.get(macroName);
}
});
然后我使用 apache http 客户端调用用户 URL:
URL url = new URL(result);
int port = url.getPort();
uri = new URI(url.getProtocol(), null, url.getHost(), port == -1 ? 80 : port, url.getPath(), url.getQuery(), null);
DefaultHttpClient client = new DefaultHttpClient();
HttpGet request = null;
try {
request = new HttpGet(uri);
client.execute(request)
} catch (Exception ex) {
if (request != null) {
request.releaseConnection();
}
}
我尝试进行一些编码,因为用户可能会发送任何包含诸如%$&
. 问题是何时content
包含类似hello&x=2&c=3243
user only gets 的内容hello
。URI
类将其视为常规GET
查询参数。任何人都可以帮忙吗?