收藏
回答

post请求,接口响应时乱码

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug 获取不限制的小程序码 工具 8.0.27 2.26.0
@GetMapping("/generateQrCode")
public R generateQrCode(@RequestParam("orgId") Long orgId) {
    String result = "";
    DataOutputStream dataOutputStreamSend = null;
    InputStream inputStream = null;
    ByteArrayOutputStream dataOutputStream = null;
    try {
        String token = HttpUtil.get(StrUtil.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={}&secret={}", appId, appSecret));
        if (StringUtils.isNotBlank(token)) {
            String accessToken = JSON.parseObject(token).getString("access_token");

            HashMap<String, Object> requestMap = new HashMap<>();
            requestMap.put("page", "pages/addFace/addFace");
            requestMap.put("env_version", "release");
            requestMap.put("scene", "orgId=" + orgId);
            requestMap.put("check_path", true);
            log.info("requestMap: {}", JSON.toJSON(requestMap));
            JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(requestMap));

            System.out.println("访问POST请求:{}" + StrUtil.format("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token={}", accessToken));
            HttpURLConnection httpConn = null;
            BufferedReader in = null;

            String url = StrUtil.format("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token={}", accessToken);
            URL realUrl = new URL(url);
            // 打开和URL之间的连接
            HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
            // 设置超时时间
            conn.setConnectTimeout(10 * 1000);
            conn.setReadTimeout(30 * 1000);

            conn.setRequestMethod("POST");
            // 设置通用的请求属性
            conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
            conn.setRequestProperty("Charset", "UTF-8");
            // 设置链接状态
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // post请求,参数要放在http正文内,因此需要设为true, 默认情况下是false;
            conn.setDoOutput(true);
            // 设置是否从httpUrlConnection读入,默认情况下是true;
            conn.setDoInput(true);
            // Post 请求不能使用缓存
            conn.setUseCaches(false);
            // 设置本次连接是否自动处理重定向
            conn.setInstanceFollowRedirects(true);

            conn.connect();
            // ++++++++++++++++++++++++++++++++++
            // TODO 写入参数
            // 基本类型和字符串使用DataOutputStream
            dataOutputStreamSend = new DataOutputStream(conn.getOutputStream());
            dataOutputStreamSend.write(JSON.toJSONString(requestMap).getBytes());
            dataOutputStreamSend.flush();
            // +++++++++++++++++++++++++++++++
            if (conn.getResponseCode() == 200) {
                // 获取返回流
                result = getResult(conn.getInputStream());
            }
        }
        return R.ok(result);
    } catch (MalformedURLException e) {
        // url格式错误
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        // 关闭相应的流
    }
    return R.ok(false);
}
回答关注问题邀请回答
收藏

1 个回答

  • Mr.Zhao
    Mr.Zhao
    2022-09-09

    下载图片能用json接收?

    2022-09-09
    有用
    回复
登录 后发表内容