How to encode space as in UrlEncodedFormEntity while executing apache HttpPost?

后端 未结 2 858
北荒
北荒 2021-01-01 06:24

The web serive i am hitting requires the parameters as URLEncodedFormEntity. I am unable to change space to %20 as per requirement of the web service, instead space is conve

相关标签:
2条回答
  • 2021-01-01 06:39

    Jens' answer works like a charm!. To complete his example this what I was using to post a parameter:

    String label = "A label";
    
    List<NameValuePair> nvps = new ArrayList<NameValuePair>();
    
    nvps.add(new BasicNameValuePair("label", label));
    httpget.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
    

    But it always posts the "+" string, I mean, "label=A+label". Using Jens' suggestion I changed my code to:

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

    Now it posts "label=A%20label"

    0 讨论(0)
  • 2021-01-01 06:52

    The UrlEncodedFormEntity is basically a StringEntity with a custom constructor, you don't actually have to use it in order to create a usuable entity.

    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
    
    0 讨论(0)
提交回复
热议问题