请问OkHttp 3如何设置post请求的编码呢?

图片描述

这是create方法的源码:

public static RequestBody create(MediaType contentType, String content) {
    Charset charset = Util.UTF_8;
    if (contentType != null) {
      charset = contentType.charset();
      if (charset == null) {
        charset = Util.UTF_8;
        contentType = MediaType.parse(contentType + "; charset=utf-8");
      }
    }
    byte[] bytes = content.getBytes(charset);
    return create(contentType, bytes);
  }

这个content是类似于“a=88&b=99”这样的字符串吗?

阅读 10.5k
2 个回答

推荐你使用 postman ,这个是 chrome 的一款http调试的插件,他可以直接生成okhttp 的代码。
这是我自己调试时用 postman生成的okhttp 的java代码。

clipboard.png

我用下面的方式服务器获取的登录的账号和密码都是null,但是我直接砸url拼接的话会获取到值。我想请教下这是为什么。

public static String sendByPostMap(String url, Map<String, String> params) {
        String result;
        OkHttpClient client = new OkHttpClient();
        StringBuilder content = new StringBuilder();
        Set<Map.Entry<String, String>> entrys = params.entrySet();
        Iterator<Map.Entry<String, String>> iterator = params.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, String> entry = iterator.next();
            content.append(entry.getKey()).append("=").append(entry.getValue());
            if (iterator.hasNext()) {
                content.append("&");
            }
        }

        RequestBody requestBody = RequestBody.create(MEDIA_TYPE_TEXT, content.toString());
        Request request = new Request.Builder().url(url).post(requestBody).build();
        Response response = null;
        try {
            response = client.newCall(request).execute();
            assert response.body() != null;
            result = response.body().string();
            System.out.println("result = " + result);
            return result;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }



    public static void main(String[] args) {
        //String url = "http://172.18.9.166:8080/user/login.kq";
        //String url = "http://172.18.9.166:8899/demo/postByMap?loginName=admin&loginPassword=Hans1107laser";
        String url = "http://172.18.9.166:8899/demo/postByMap";
        Map<String, String> params = new HashMap<>();
        params.put("loginName", "admin");
        params.put("loginPassword", "123456");
        String result = sendByPostMap(url, params);
        System.out.println("result = " + result);

    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题