为什么 Volley String 请求不能在 x-www-form-urlencoded 中使用 POST 方法发送 Body 参数?

纳杰梅

首先,我应该说我在这里阅读了几个类似的故事,但没有一个解决了我收到400错误代码的问题。我想使用 Post 方法将一些登录信息发送到 android studio 3.3.1 和 volley 库中的服务器。我在 getBody 中将参数作为键值发送,并在 getBodyContentType() 中设置内容类型。服务器只获取 xxx-form-urlencoded 格式的参数。我使用邮递员作为代理来查看正在发送的内容...邮递员以原始格式而不是 xxx-form-urlencoded 格式接收参数,我认为这就是为什么服务器无法获取登录参数并且我收到 400 错误代码(BasicNetwork .performRequest: Unexpected response code 400)- btw 服务器是用 asp.net 和 IIS webserver 编写的。

 private  void PostParams()
        {
             Boolean is_valid_user;
            try {

                String URL = "http://192.168.43.22:5555/AOBServices/login";
                JSONObject jsonBody = new JSONObject();
                jsonBody.put("my_very_special_key","Love");
                jsonBody.put("username", "amir");
                jsonBody.put("password", "1234");
                jsonBody.put("grant_type", "password");
                final String requestBody = jsonBody.toString();
                final StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {

                        Log.i("VOLLEY", response);
                        Toast.makeText(LoginActivity.this, "SUCCESSSSSSSSSSSSS \n response: "+response, Toast.LENGTH_SHORT).show();
                        //update shared prefs.....
                        myResponse=response;
                        shprefs= new sharedPrefsClass(getApplicationContext());
                        shprefs.setDefaults("USER_ID", mEmail);
                        shprefs.setDefaults("IS_SIGNEDIN", true);
                        startActivity(new Intent(LoginActivity.this,MainActivity.class));
                        finish();
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                        // As of f605da3 the following should work
                        NetworkResponse response = error.networkResponse;
                        if (error instanceof ServerError && response != null) {
                            try {
                                String res = new String(response.data,
                                        HttpHeaderParser.parseCharset(response.headers, "utf-8"));

                            } catch (UnsupportedEncodingException e1) {
                                // Couldn't properly decode data to string
                                e1.printStackTrace();
                            }

                        }
                    }


                }) {
                    @Override
                    public String getBodyContentType() {
                        return "application/x-www-form-urlencoded; charset=UTF-8";

                    }
                    @Override
                    protected String getParamsEncoding() {
                        return "utf-8";
                    }


                    @Override
                    public byte[] getBody() throws AuthFailureError {
                        try {
                                 return requestBody == null ? null : requestBody.getBytes("utf-8");

                        } catch (UnsupportedEncodingException uee) {
                            VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", requestBody, "utf-8");
                                 return null;
                        }
                    }

                 @Override
                    protected Response<String> parseNetworkResponse(NetworkResponse response) {
                        String responseString = "";
                        if (response != null) {
                            responseString = String.valueOf(response.statusCode);
                            // can get more details such as response.headers
                        }
                        return Response.success(responseString, HttpHeaderParser.parseCacheHeaders(response));
                    }
                };

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

对于那些面临类似问题的人:在对 Volley 感到失望之后,我通过 实现了网络内容HttpUrlConnection,并发现了问题所在:我以 json 对象格式发送参数,即 {key:value,...} 而服务器预期 key:value&key :value&... 所以返回到 Volley 并像上面那样制作参数字符串并在 中使用它getBody(),解决了我的问题。:)

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PowerShell - Slack API - 房间历史 - 带有 x-www-form-urlencoded 参数的 Post 方法

来自分类Dev

如何使用带有 loopj-async-http 库的 x-www-form-urlencoded 主体发送 post 请求

来自分类Dev

如何在webclient的post请求中发送x-www-form-urlencoded?

来自分类Dev

Javascript:从x-www-form-urlencoded请求获取参数值

来自分类Dev

PYTHON:requests.post()如何发送编码为application / x-www-form-urlencoded的request_body

来自分类Dev

使用POST + application / x-www-form-urlencoded发送敏感数据

来自分类Dev

如何在内容类型 application/x-www-form-urlencoded 中使用自定义对象测试 Post 请求?

来自分类Dev

使用application / x-www-form-urlencoded使用node.js在发布请求中发送数组

来自分类Dev

使用Python请求和x-www-form-urlencoded发送嵌套的json数据

来自分类Dev

如何使用Fetch发布x-www-form-urlencoded请求?

来自分类Dev

Python请求模块发送JSON字符串而不是x-www-form-urlencoded参数字符串

来自分类Dev

改造+ POST方法+ www-form-urlencoded

来自分类Dev

使用 Volley 在 POST 请求中发送参数

来自分类Dev

如何在Rails中使用x-www-form-urlencoded

来自分类Dev

当我的dataType:“ JSON”时,为什么我的Ajax请求发送“ Content-Type:应用程序/ x-www-form-urlencoded”?

来自分类Dev

Spring MVC中内容类型应用程序/ x-www-form-urlencoded的请求参数的顺序

来自分类Dev

带有application / x-www-form-urlencoded格式的Node.js Axios POST请求?

来自分类Dev

无法使用带有x-www-form-urlencoded参数的JSOUP登录网站

来自分类Dev

无法使用带有x-www-form-urlencoded参数的JSOUP登录网站

来自分类常见问题

如何使用x-www-form-urlencoded强制Angular2进行POST

来自分类Dev

POST使用cURL和PHP中的x-www-form-urlencoded返回访问被拒绝

来自分类Dev

POST使用cURL和PHP中的x-www-form-urlencoded返回访问被拒绝

来自分类Dev

Akka HTTP 如何使用 Content-Type application/x-www-form-urlencoded POST singleRequest

来自分类Dev

如何使Angular 2将所有请求发送为application / x-www-form-urlencoded

来自分类Dev

如何发送带有内容类型x-www-form-urlencoded android改造的发布请求

来自分类Dev

Jsoup发送application / x-www-form-urlencoded而不是json

来自分类Dev

如何使用带有角度的ngResource模块发送x-www-form-urlencoded数据?

来自分类Dev

使用 HttpClient 从内容类型 application/x-www-form-urlencoded 使用 grant_type 和 scope POST

来自分类Dev

如何将 x-www-form-urlencoded post Message 转换为 JSON post Message?

Related 相关文章

  1. 1

    PowerShell - Slack API - 房间历史 - 带有 x-www-form-urlencoded 参数的 Post 方法

  2. 2

    如何使用带有 loopj-async-http 库的 x-www-form-urlencoded 主体发送 post 请求

  3. 3

    如何在webclient的post请求中发送x-www-form-urlencoded?

  4. 4

    Javascript:从x-www-form-urlencoded请求获取参数值

  5. 5

    PYTHON:requests.post()如何发送编码为application / x-www-form-urlencoded的request_body

  6. 6

    使用POST + application / x-www-form-urlencoded发送敏感数据

  7. 7

    如何在内容类型 application/x-www-form-urlencoded 中使用自定义对象测试 Post 请求?

  8. 8

    使用application / x-www-form-urlencoded使用node.js在发布请求中发送数组

  9. 9

    使用Python请求和x-www-form-urlencoded发送嵌套的json数据

  10. 10

    如何使用Fetch发布x-www-form-urlencoded请求?

  11. 11

    Python请求模块发送JSON字符串而不是x-www-form-urlencoded参数字符串

  12. 12

    改造+ POST方法+ www-form-urlencoded

  13. 13

    使用 Volley 在 POST 请求中发送参数

  14. 14

    如何在Rails中使用x-www-form-urlencoded

  15. 15

    当我的dataType:“ JSON”时,为什么我的Ajax请求发送“ Content-Type:应用程序/ x-www-form-urlencoded”?

  16. 16

    Spring MVC中内容类型应用程序/ x-www-form-urlencoded的请求参数的顺序

  17. 17

    带有application / x-www-form-urlencoded格式的Node.js Axios POST请求?

  18. 18

    无法使用带有x-www-form-urlencoded参数的JSOUP登录网站

  19. 19

    无法使用带有x-www-form-urlencoded参数的JSOUP登录网站

  20. 20

    如何使用x-www-form-urlencoded强制Angular2进行POST

  21. 21

    POST使用cURL和PHP中的x-www-form-urlencoded返回访问被拒绝

  22. 22

    POST使用cURL和PHP中的x-www-form-urlencoded返回访问被拒绝

  23. 23

    Akka HTTP 如何使用 Content-Type application/x-www-form-urlencoded POST singleRequest

  24. 24

    如何使Angular 2将所有请求发送为application / x-www-form-urlencoded

  25. 25

    如何发送带有内容类型x-www-form-urlencoded android改造的发布请求

  26. 26

    Jsoup发送application / x-www-form-urlencoded而不是json

  27. 27

    如何使用带有角度的ngResource模块发送x-www-form-urlencoded数据?

  28. 28

    使用 HttpClient 从内容类型 application/x-www-form-urlencoded 使用 grant_type 和 scope POST

  29. 29

    如何将 x-www-form-urlencoded post Message 转换为 JSON post Message?

热门标签

归档