如何在执行apache HttpPost时在UrlEncodedFormEntity中将空格编码为%20?

时间:2011-10-27 11:10:16

标签: android apache encoding httpclient url-encoding

我正在点击的网络服务需要参数为URLEncodedFormEntity。我无法根据Web服务的要求将空间更改为%20,而是将空间转换为+。

我的代码是:

HttpClient client = new DefaultHttpClient()
HttpPost post = new HttpPost(url);
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters,
            HTTP.UTF_8);
post.setEntity(entity);
HttpResponse resp = client.execute(post);

其中参数是List<NameValuePair>个参数。

我阅读了很多帖子,所有帖子都建议在动画后将manuall更改为%20。在这里,我如何访问实体并手动更改它? 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:8)

UrlEncodedFormEntity基本上是一个带有自定义构造函数的StringEntity,实际上你不必使用它来创建一个可用的实体。

String entityValue = URLEncodedUtils.format(parameters, HTTP.UTF_8);
// Do your replacement here in entityValue
StringEntity entity = new StringEntity(entityValue, HTTP.UTF_8);
entity.setContentType(URLEncodedUtils.CONTENT_TYPE);
// And now do your posting of this entity

答案 1 :(得分:0)

延&#39;回答就像一个魅力!为了完成他的例子,我用它来发布一个参数:

String label = "A label";

List<NameValuePair> nvps = new ArrayList<NameValuePair>();

nvps.add(new BasicNameValuePair("label", label));
httpget.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

但它始终发布&#34; +&#34;字符串,我的意思是,&#34;标签= A +标签&#34;。使用Jens&#39;建议我将我的代码更改为:

String label = "A label";

List<NameValuePair> nvps = new ArrayList<NameValuePair>();

nvps.add(new BasicNameValuePair("label", label));

String entityValue = URLEncodedUtils.format(nvps, HTTP.UTF_8);
entityValue = entityValue.replaceAll("\\+", "%20");

StringEntity stringEntity = new StringEntity(entityValue, HTTP.UTF_8);
stringEntity.setContentType(URLEncodedUtils.CONTENT_TYPE);

httpget.setEntity(stringEntity);

现在发布&#34; label = A%20label&#34;