You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android使用Volley发送POST请求遇404错误求助

解决Volley POST请求404错误的排查方案

我完全理解你的困扰——Postman能正常发送请求,到了Android的Volley这里就报404,明明服务端没问题,试了各种方法还是不行,确实挺闹心的。咱们从Postman和Volley的请求差异入手,一步步排查问题:

1. 先确认URL的完全一致性

Postman会自动处理一些URL细节,但Volley对URL的要求更严格:

  • 检查URL末尾是否带斜杠:比如Postman里的http://xxx/api/和Volley里的http://xxx/api可能被服务端视为不同路径
  • 排查URL里的特殊字符:如果有中文或特殊符号,确保Volley里的URL是正确编码的(Postman会自动编码,Volley不会处理URL本身的编码)
  • 复制Postman里的完整URL直接替换到Volley代码中,排除手动输入的错误

2. 对齐Postman的请求头

Postman默认会携带一些请求头(比如Content-Type、User-Agent),但Volley的StringRequest可能没有自动添加,这是最常见的差异点:
你可以重写getBodyContentType()和getHeaders(),完全对齐Postman的请求头:

@Override
public String getBodyContentType() {
    // 对应Postman表单请求的默认Content-Type
    return "application/x-www-form-urlencoded; charset=UTF-8";
}

@Override
public Map<String, String> getHeaders() throws AuthFailureError {
    Map<String, String> headers = new HashMap<>();
    // 复制Postman里的所有请求头,比如Accept、User-Agent等
    headers.put("Accept", "application/json");
    headers.put("User-Agent", "PostmanRuntime/7.32.3");
    return headers;
}

3. 检查参数传递格式是否匹配

你用getParams()是按表单格式传递参数,但如果API实际期望的是JSON请求体(Postman里选的是Raw -> JSON),那Volley的StringRequest就会不匹配,导致服务端找不到正确的接口:
这种情况应该改用JsonObjectRequest发送JSON格式的请求:

// 构造JSON请求体
JSONObject jsonBody = new JSONObject();
try {
    jsonBody.put("email", "test@email.com");
    jsonBody.put("token", "token");
} catch (JSONException e) {
    e.printStackTrace();
}

JsonObjectRequest postRequest = new JsonObjectRequest(Request.Method.POST, url, jsonBody,
        new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                Log.d("Response", response.toString());
            }
        },
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(getApplicationContext(), error.toString(), Toast.LENGTH_SHORT).show();
                Log.d("Error.Response", error.toString());
            }
        }) {
    @Override
    public String getBodyContentType() {
        return "application/json; charset=utf-8";
    }
};
queue.add(postRequest);

4. 处理明文流量限制(针对HTTP接口)

如果你的API是HTTP协议(非HTTPS),Android 9及以上版本默认禁止明文流量,这会导致请求被系统拦截,表现为404或其他错误:
在AndroidManifest.xml的application标签中添加以下配置:

<application
    ...
    android:usesCleartextTraffic="true">
    ...
</application>

5. 抓包对比请求细节

如果以上方法都没用,直接抓包对比Postman和Volley的请求是最直接的方式:

  • 用Charles或Fiddler抓Volley的请求,查看实际发送的URL、请求头、请求体
  • 和Postman的请求详情做逐字段对比,就能找到差异点

内容的提问来源于stack exchange,提问作者redduckto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:09:26