2013-06-13 1 views
0

나는 SMPP 서버로부터 메시지를 수신하고 수신 된 메시지를 사용자 웹 서비스에 전달하는 응용 프로그램을 보유하고 있습니다. ${originator}, ${destination}, ${content} 자신의 패턴이자바에서 URL을 구문 분석하는 템플릿

http://www.example.com/get.php?from=${originator}&to=${destination}&data=${content} 
http://www.example.com/submit?origin=${originator}&dst=${destination}&cnt=${content} 

그들 모두 : 모든 사용자는이 같은 데이터베이스의 URL이 있습니다. 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(); 
    } 
} 

나는 사용자가 보낼 수 있기 때문에 약간의 인코딩을하려고 노력 :

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

가 그럼 난 사용자 URL 호출하는 아파치 웹 클라이언트를 사용 : 나는 데이터베이스에서 사용자 URL을받은 후 인수 이상 교체 Jodd StringTemplateParser를 사용 %$&과 같은 문자가 포함 된 텍스트 문제는 contenthello&x=2&c=3243과 같은 내용이 포함 된 경우에만 hello을 얻는 것입니다. URI 클래스는 일반 매개 변수 GET 쿼리 매개 변수로 처리합니다. 누구든지 도와 줄 수 있습니까?

답변

1

새 URI를 작성할 때 매개 변수 값을 인코딩해야합니다.

URLEncoder.encode(String)을 사용하여 매개 변수를 인코딩 할 수 있습니다.

따라서 MacroResolver에서 URLEncoder.encode(map.get(macroName))을 반환하십시오. 나는 귀하의 경우 생각

0

당신은 당신의 코드

요청 = 새로운 HttpGet (URL이 같은 HTTP의 기본 콘텐츠 숯불 설정 뭔가를 사용해야 + "?"+ URLEncodedUtils.format (의 NameValuePair, HTTP.DEFAULT_CONTENT_CHARSET));

관련 문제