2016-06-12 48 views
1

在我的Android应用程序中,我正在使用谷歌的排球进行网络操作。有一种情况我需要提出请求,但将身体作为表单数据发送。 我已经尝试了其他一切,但我无法将请求作为表单数据。Android:将身份数据发送为身体Google Volley

这里是卷曲

curl -X POST -H "Content-Type: multipart/form-data" -F "mobile_number=<XXXX>" "<server_url>" 

我怎样才能实现凌空-F一部分?服务器正在抛出不好的请求。

这是我做了什么:

final JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, URLFactory.OTP_URL, 
       null, listener, errorListener){ 

      @Override 
      public byte[] getBody() { 
       final JSONObject jsonObject = new JSONObject(); 
       try { 
        jsonObject.put("mobile_number", mobileNumber); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
        return null; 
       } 
       return jsonObject.toString().getBytes(); 
      } 


      @Override 
      public Map<String, String> getHeaders() throws AuthFailureError { 
       final HashMap<String, String> headers = new HashMap<>(); 
       headers.put("Content-Type", "multipart/form-data"); 
       return headers; 
      } 
     }; 

请帮我在这。

+0

你看过http://stackoverflow.com/questions/32240177/working-post-multipart-request-with-volley-and-without-httpentity?lq=1你们T' – BNK

回答

1

这可以通过自己创建postBody来排除。请参考下面的代码。

代码产生身体:

private String createPostBody(Map<String, String> params) { 
     StringBuilder sbPost = new StringBuilder(); 
     for (String key : params.keySet()) { 
       if (params.get(key) != null) { 
        sbPost.append("\r\n" + "--" + BOUNDARY + "\r\n"); 
        sbPost.append("Content-Disposition: form-data; name=\"" + key + "\"" + "\r\n\r\n"); 
        sbPost.append(params.get(key)); 
       } 
      } 

     return sbPost.toString(); 
    } 

体改getBody()代码:

@Override 
      public byte[] getBody() { 
       Map<String,String> params = new HashMap<>(); 
       params.add("mobile_number", mobileNumber); 
       String postBody = createPostBody(params); 

       return postBody.getBytes(); 
      } 

您将需要修改getHeaders也告诉服务器你边界是什么:

@Override 
      public Map<String, String> getHeaders() throws AuthFailureError { 
       final HashMap<String, String> headers = new HashMap<>(); 
       headers.put("Content-Type", "multipart/form-data;boundary=" + BOUNDARY;); 
       return headers; 
      } 
+0

什么是边界? sbPost.append(“\ r \ n”+“ - ”+ BOUNDARY +“\ r \ n”); – Kaustubh

+0

这是服务器用于拆分邮件正文中收到的不同参数的字符串。你可以参考下面的链接:http://stackoverflow.com/questions/3508338/what-is-the-boundary-in-multipart-form-data –

+0

我也添加了getHeader()函数。您可以将任何字符串定义为边界。例如。 private static final String BOUNDARY =“s2retfgsGSRFsERFGHfg”; –