在 Volley 中实现 POST 请求时出现错误代码 400,但在使用 OkHttp 时却没有
Posted
技术标签:
【中文标题】在 Volley 中实现 POST 请求时出现错误代码 400,但在使用 OkHttp 时却没有【英文标题】:Error Code 400 when implementing POST Request in Volley, but not when implementing with OkHttp 【发布时间】:2018-03-26 13:09:12 【问题描述】:下面是我在使用 OkHttp 时用来发送 POST 请求的类:
public class PostExample
private static final MediaType JSON
= MediaType.parse("application/json;");
private OkHttpClient client = new OkHttpClient();
String post(String url, String json) throws IOException
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
try (Response response = client.newCall(request).execute())
return response.body().string();
String bowlingJson(String user, String password)
String str = "" +
"\"username\": \"" + user + "\", " +
"\"password\": \"" + password + "\"" +
"";
System.out.println(str);
return str;
public static void main(String[] args) throws IOException
PostExample example = new PostExample();
String json = example.bowlingJson(args[0], args[1]);
String response = example.post("http://192.168.43.123:8000/api/jwt-auth/", json);
System.out.println(args[0] + " " + args[1]);
System.out.println(response);
这很好用,它给了我一个 JSON 对象作为响应的字符串。 下面给出的是与 Volley 一起使用时几乎相同的东西,只是它给了我一个 400 错误
公共类 PostAssistant
private Context context;
private RequestQueue queue;
public PostAssistant(Context context)
this.context = context;
queue = Volley.newRequestQueue(context);
private void post(String url, final String user , final String password) throws IOException
StringRequest postRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>()
@Override
public void onResponse(String response)
// response
Log.d("Response", response);
,
new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
// error
Log.d("Error.Response", "");
)
@Override
protected Map<String, String> getParams()
Map<String, String> params = new HashMap<>();
params.put("username", user);
params.put("password", password);
return params;
@Override
public String getBodyContentType()
return "application/json";
;
queue.add(postRequest);
private void connect(String user, String password) throws IOException
post(Constants.loginUrl , user , password);
public void connect(String[] args) throws IOException
connect(args[0] , args[1]);
这是logcat中显示的错误:
E/Volley: [5322] BasicNetwork.performRequest: Unexpected response code 400 for http://192.168.43.123:8000/api/jwt-auth/
【问题讨论】:
【参考方案1】:我通过将 getBodyContentType()
更改为 getHeaders()
来修复它
@Override
public Map<String , String> getHeaders()
Map<String, String> params = new HashMap<String, String>();
params.put("Content-Type", "application/json");
return params;
【讨论】:
以上是关于在 Volley 中实现 POST 请求时出现错误代码 400,但在使用 OkHttp 时却没有的主要内容,如果未能解决你的问题,请参考以下文章
发出 POST 请求时出现 Google Cloud Function CORS 错误
从 React 向 Django 发送 post 请求时出现 400(错误请求)