HttpClient - UrlEncodedFormEntity xml编码NameValuePair

时间:2012-06-11 20:16:33

标签: httpclient apache-httpclient-4.x

xml编码不正确 - 任何帮助

List<NameValuePair> formparams = new ArrayList<NameValuePair>();
            formparams.add(new BasicNameValuePair("VENDOR", "pradeep"));            
            formparams.add(new BasicNameValuePair("REQTYPE", "ExternalSystem"));
            formparams.add(new BasicNameValuePair("DATA", "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"));
            UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");

我的出局是VENDOR=pradeep&REQTYPE=ExternalSystem&DATA=%3C%3Fxml+version%3D%221.0%22+encoding%3D%22UTF-8%22%3F%3E

但我预料到这一点

VENDOR=D-B165&REQTYPE=EXRCTRFREQ&DATA=<?xml version=\"1.0\" encoding=\"UTF-8\"?>

任何人如何做以上

谢谢Pradeep

1 个答案:

答案 0 :(得分:1)

看起来你的UrlEncodedFormEntity()调用的输出是正确的 - 它的URL编码了formparms ala Percent-encoding中的所有NameValuePairs。

你没有提到你的预期输出的用例,但这可以通过简单地连接没有编码的NameValuePairs来做你想要的:

StringBuilder sb = new StringBuilder();
Iterator<NameValuePair> i = formparams.iterator();
while( i.hasNext() )
{
    sb.append( i.next().toString() );
    if( i.hasNext() )
        sb.append( "&" );
}

如果您仍然需要一个尊重该输出的HttpEntity,您可以尝试使用StringEntity,例如:

HttpEntity entity = new StringEntity( sb.toString() );