使用JSON正文发送POST请求时出现400响应

海恩斯·康索里尼

我一直在这个站点和其他站点中搜索有关使用JSON正文发出POST请求的解决方案,但是我发现的解决方案似乎对我不起作用。作为参考,这是我使用终端上的curl发出的成功请求:

curl -I -X POST -H "x-app-id:myID" -H "x-app-key:myKey" 
-H "Content-Type:application/json" -H "x-remote-user-id:0" 
https://trackapi.nutritionix.com/v2/natural/exercise -d '{
 $+  "query":"ran 3 miles",
 $+  "gender":"female",
 $+  "weight_kg":72.5,
 $+  "height_cm":167.64,
 $+  "age":30
 $+ }'

我尝试将其转换为android应用程序的尝试使我陷入凌空,而四处搜寻导致我使用以下代码段:

try {
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    JSONObject jsonBody = new JSONObject();
    jsonBody.put("query", "ran 3 miles");
    jsonBody.put("gender", "female");
    jsonBody.put("weight_kg", 72.5);
    jsonBody.put("height_cm", 167.64);
    jsonBody.put("age", 30);
    final String mRequestBody = jsonBody.toString();
    String url = "https://trackapi.nutritionix.com/v2/natural/exercise";

    StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.i("LOG_RESPONSE", response);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("LOG_RESPONSE", error.getMessage());
        }
    }) {

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> params = new HashMap<>();
            params.put("x-app-id", "myID");
            params.put("x-app-key", "myKey");
            params.put("Content-Type", "application/json");
            params.put("x-remote-user-id", "0");
            return params;
        }

        @Override
        public String getBodyContentType() {
            return "application/json; charset=utf-8";
        }

        @Override
        public byte[] getBody() throws AuthFailureError {
            try {
                return mRequestBody == null ? null : mRequestBody.getBytes("utf-8");
            } catch (UnsupportedEncodingException uee) {
                VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", mRequestBody, "utf-8");
                return null;
            }
        }

        @Override
        protected Response<String> parseNetworkResponse(NetworkResponse response) {
            String responseString = "";
            if (response != null) {
                responseString = String.valueOf(response.statusCode);
            }
            return Response.success(responseString, HttpHeaderParser.parseCacheHeaders(response));
        }
    };

    requestQueue.add(stringRequest);
} catch (JSONException e) {
    e.printStackTrace();
}

API规定必须在正文中发送数据,这就是为什么我排除了getParams函数的原因。该代码段似乎对互联网上的其他所有人都有效,但是我始终从中收到400条消息。我也已经将相同的curl请求转换为postman中的请求,并且在那里也很好用。有人对我哪里出问题有任何见解吗?

编辑:这是到要求的api的链接

达克什·加加斯

您确定要在x-app-id和其他字段中传递正确的ID吗?因为根据日志,它说"x-app-id" = "myId"您需要传递应用程序的实际ID。

另外,您已经定义了content-type内部,getBodyContentType()因此请勿内部提及getHeaders()或相反。

并且根据API文档x-remote-user-id不是必需的。也许这就是您的请求返回400错误的原因

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Spring Framework中使用Ajax发送数据时出现400错误的请求

当请求中没有发送正文时,Java / Spring>使用@RequestBody处理控制器方法的错误请求响应

发送POST请求时无效的JSON原语

执行正文时,npm请求未得到json响应。{object}

如何使用Volley发送带有JSON正文的POST请求?

在Android的OKhttp中通过POST请求发送JSON正文

使用Karate框架发送嵌套JSON作为请求以验证POST REST API方法时出现问题

尝试发送POST请求时,应用脚本发送405响应

使用Json数据的POST方法改进后出现错误代码400:错误请求

POST到Razor页面时出现400错误的请求

在R上使用JSON正文发布POST请求的请求

使用QT发送POST请求并阅读Json响应

当我尝试POST请求时获得400响应

如何从Akka HTTP POST请求读取JSON正文并将最终响应作为JSON数组发送

尝试使用HttpRequestMessage发送JSON正文时的错误响应

如何在Qt中使用JSON正文发送POST请求

使用Guzzlehttp发送带有JSON正文的POST请求

使用HTTP get请求发送JSON正文

POST方法在被请求时不断发送400个错误

使用Jackson JSON Mapper在JSON到POJO之间映射时出现400错误请求

在Express.js上使用Axios向Spotify API发出POST请求时出现错误400

使用php发送GET请求时出现HTTP 400错误请求错误

POST请求未发送任何请求正文

Runscope –如何通过POST请求发送JSON正文?

尝试发送POST请求并获取json数据,但得到400

Android:HttpUrlConnection使用POST发送请求正文(而不是GET)

使用HttpURLConnection执行POST请求时获取JSON响应

使用Scala和Play框架与正文发送POST请求

使用Volley发送POST参数和标头时的代码响应代码400

TOP 榜单

  1. 1

    来自Microsoft Office加载项taskpane.js的MySQL驱动程序模块的空引用

  2. 2

    使用AWS Cognito和React的仅限Facebook / Google的登录名(无用户名/密码)

  3. 3

    创建Windows Phone 8应用并将其连接到数据库的最佳方法(最好是SQL Server)

  4. 4

    为什么Java中的System.out.println()打印到控制台?

  5. 5

    卷曲函数无法解析来自bash中变量的代理

  6. 6

    是什么在Android的consumer-rules.pro和proguard-rules.pro之间的区别?

  7. 7

    设置与Apache POI Excel表散点图标记图标的颜色

  8. 8

    将Qt Pyside2与asyncio await语法一起使用?

  9. 9

    崇高的文字+蟒蛇的蟒蛇

  10. 10

    任务':app:minifyReleaseWithR8'.java.lang.NullPointerException的执行失败(无错误消息)

  11. 11

    OpenJDK的和AdoptOpenJDK的区别

  12. 12

    大型数据集缓存到Spark内存中时,“超出了GC开销限制”(通过sparklyr和RStudio)

  13. 13

    “执行测试CMAKE_HAVE_LIBC_PTHREAD”失败实际上是什么意思?

  14. 14

    使用Core 2.2中的Identity,如何在关闭浏览器15分钟后保持会话活动?

  15. 15

    React中的ForwardRefExoticComponent和ForwardRefRenderFunction有什么区别?

  16. 16

    猫鼬查找结果,然后将字段替换为findOne

  17. 17

    如何降级Google Colab的Torch版本

  18. 18

    Keras提前停止回调错误,val_loss指标不可用

  19. 19

    如何避免VSCode中的“导入路径不能以.ts扩展名结尾”错误?

  20. 20

    Nuxt.JS:如何在页面中获取路由URL参数

  21. 21

    是否有为什么会AccessibilityManager.sInstance导致内存泄漏的一个原因?

热门标签

归档