在我的Android应用程序中,我使用谷歌的凌空进行网络操作。在某种情况下,我需要发出请求,但发送body作为表单数据。 我已尝试过其他所有内容,但我无法将请求作为表单数据发送。
这是一个卷曲
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 :(得分:2)
这可以通过自己创建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;
}