0

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 に他のパラメータがある場合とない場合があります。StringTemplateParserデータベースからユーザー URL を取得した後、Jodd を使用して上記の引数を置き換えます。

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();
    }
}

ユーザーは のような文字を含むテキストを送信する可能性があるため、エンコードを試みました%$&。問題は、user only getscontentのようなものが含まれている場合です。クラスはそれを通常のクエリ パラメータとして扱います。誰でも助けることができますか?hello&x=2&c=3243helloURIGET

4

2 に答える 2