2

我需要通过 HTTP POST 向服务发送一些值。发送的参数之一必须包含空格。它是“关键”nvp。但是该服务总是返回一条不成功的消息,只要我添加一个值,它就会起作用。

现在这是一个问题,当通过 iphone 设备向同一服务完成请求时,它在发送 BLANKS 时工作得很好,我是否在我的请求中遗漏了一些内容以允许通过 NameVauePair 发送空白值?

这是我的 NaveValuePair

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(5);
nameValuePairs.add(new BasicNameValuePair("id","1"));
nameValuePairs.add(new BasicNameValuePair("uId",android_id));
nameValuePairs.add(new BasicNameValuePair("Key", " "));  // This value must be BLANKS
nameValuePairs.add(new BasicNameValuePair("Rate","0"));
nameValuePairs.add(new BasicNameValuePair("Notes", notes));

这是我的 POST 请求

HttpClient httpclient = new DefaultHttpClient();                        
HttpPost httppost = new HttpPost(context.getResources()                 
        .getString(R.string.url_event_rating));                             

try {                                                                   

    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "utf-8"));

    // Execute HTTP Post Request                                          
    HttpResponse response = httpclient.execute(httppost);                 
    String responseBody = EntityUtils.toString(response                   
            .getEntity());                                                    

} catch (ClientProtocolException e) {                                   
    Log.d("ClientProtocolException", e.getMessage());                     
} catch (IOException e) {                                               
    Log.d("IOException", e.getMessage());                                 
} 
4

3 回答 3

1

尝试添加SP而不是文字空格字符。这是 BasicNameValuePair 提供给您的语法:http: //developer.android.com/reference/org/apache/http/message/BasicNameValuePair.html(指定类的一般概述)和http://www.w3 .org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2(指定接受的令牌)。

本质上,根据我在该主题上阅读的内容,您想插入SP而不是。" "

编辑:根据上面的第二个链接:SP = <US-ASCII SP, space (32)>. 本质上,要么放置一个值为 32(十进制)或 0x20(十六进制)的字符。或者,将您的编码更改UrlEncodedFormEntity(nameValuePairs, "utf-8")"US-ASCII".

于 2013-06-20T23:21:12.533 回答
0

当我们发送一个 POST 请求时,HTTP Headers 中有一些字段需要设置,比如Content-Type带有 value 的字段"application/x-www-form-urlencoded",它是默认类型。value我们应该在发送之前对请求正文的字段进行编码。URLEncoder.encode(String s, String charsetName)charsetName函数用给定的ie对字符串进行编码'utf-8'。默认使用的编码基于通用 URI百分比编码规则的早期版本。

一个编码示例:类似的字符串My Name is "Marshal"将被编码为: My%20Name%20is%20%22Marshal%22.

(name, value)因此,最安全的方法是在使用此函数编码后设置pair。那是:

          value = URLEncoder.encode(value, "utf-8");
          nameValuePairs.add(new BasicNameValuePair(key, value));
于 2013-10-13T18:01:53.513 回答
-1

好的,可能还有其他方法可以让它工作,但下面的代码对我有用。

我使用以下方法让它工作。

String blanks = " ";  
nameValuePairs.add(new BasicNameValuePair("Key", blanks.replaceAll(" ", "%20")));

希望这可以帮助遇到同样问题的人。

于 2013-06-20T23:36:56.513 回答