美文网首页
okhttp3使用form表单提交 修改编码

okhttp3使用form表单提交 修改编码

作者: 阿班是小猿 | 来源:发表于2020-07-19 15:08 被阅读0次

最近有个发送短信的功能,使用的某通的短信接口,调试过程遇到了一点问题:
短信接口主要有以下三点要求:

  • 使用post请求
  • 采用form表单提交
  • 短信内容使用GBK 编码
    简单demo如下:
    OkHttpClient okHttpClient = new OkHttpClient();

    FormBody formBody = new FormBody.Builder()
            .add("SpCode", "***") // 企业编码
            .add("LoginName", "***") // 用户名
            .add("Password", "***") // 密码
            .add("MessageContent", "你有一项编号为123的事务需要处理") // 短信模板内容
            .add("UserNumber", "185***351") // 手机号
            .add("templateId", "")
            .add("SerialNumber", "")
            .add("ScheduleTime", "")
            .add("f", "1")
            .build();
    Request request = new Request.Builder()
            .url(URL)
            .post(formBody)
            .build();
    try {
      Response response = okHttpClient.newCall(request).execute();
      String respBody = new String(response.body().bytes(), "gbk");
      System.out.println(respBody);
    } catch (Exception e){
      System.out.println("发送短信失败......");
    }

执行上面的代码报错

result=28&description=发送内容与模板不符

因为短信接口要求短信内容为GBK编码,okhttp通过form表单提交时会自动编码,但无法控制编码格式,所以我们方的短信模板与实际时不符的:

image.png
使用 addEncoded() 方法修改如下:
    OkHttpClient okHttpClient = new OkHttpClient();

    FormBody formBody = new FormBody.Builder()
            .add("SpCode", "***")
            .add("LoginName", "***")
            .add("Password", "***")
            .addEncoded("MessageContent", URLEncoder.encode("你有一项编号为123的事务需要处理","gbk")) // 添加已编码的键值对
            .add("UserNumber", "185***351")
            .add("templateId", "")
            .add("SerialNumber", "")
            .add("ScheduleTime", "")
            .add("f", "1")
            .build();

    Request request = new Request.Builder()
            .url(URL)
            .post(formBody)
            .build();

    try {
      Response response = okHttpClient.newCall(request).execute();
      String respBody = new String(response.body().bytes(), "gbk");
      System.out.println(respBody);
    } catch (Exception e) {
      System.out.println("发送短信失败......");
    }

使用 addEncoded() 方法,添加已经被编码(gbk)的参数的值 ,okhttp将不再对此参数的值进行默认编码,得到的结果正式我们想要的

image.png

相关文章

网友评论

      本文标题:okhttp3使用form表单提交 修改编码

      本文链接:https://www.haomeiwen.com/subject/efglkktx.html