微信后台校验,请求方式()

像这种是既有url参数,又有json参数嘛,应该要怎么传参

 

url参数,直接拼接在微信第三方接口上。其他参数用map集合封装,然后借助第三方json工具,将map转为json。

url拼接一部分,post里面表单提交一部分

如下配置请求:

 

post请求,post部分封装好Map转json,get部分参数直接拼接在url上

第一步,引入一个工具包

 <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.6.5</version>
        </dependency>

第二步,写请求的代码

模仿官方文档里面这个例子:https://www.hutool.cn/docs/#/http/Http客户端工具类-HttpUtil

完整代码:


import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONUtil;

import java.util.HashMap;
import java.util.Map;

import static cn.hutool.core.net.url.UrlBuilder.ofHttp;
import static cn.hutool.http.HttpRequest.post;
import static java.nio.charset.StandardCharsets.UTF_8; 

public class Test {
    public static void main(String[] args) {
        // url https://api.weixin.qq.com/intp/realname/checkrealnameinfo?access_token=ACCESSTOKEN
        Map<String, String> headMap = new HashMap<>();
        headMap.put("Content-Type", "application/json");
        headMap.put("Accept", "application/json");
        Map<String, Object> params = new HashMap<>();
        params.put("openid", "这里写你的openid");
        params.put("real_name", "这里写你的real_name");
        HttpResponse response = post(ofHttp("https://api.weixin.qq.com", UTF_8).addPath("intp").addPath("realname").addPath("checkrealnameinfo").addQuery("access_token", "这里写你的access_token").build())
                .headerMap(headMap, true)
                .timeout(60 * 1000)
                .body(JSONUtil.parseObj(params).toString())
                .execute();
        if (response.isOk()) {
            String body = response.body();
            System.out.println(body);
        }

    }
}

 

post 参数你直接传到请求体,url后的token参数,你拼接字符串

  public static String doPost(String url, String charSet, Map<String, Object> map, Map<String, Object> headers) {
        logger.debug("http post visit url:" + url + ", params:" + map);
        try {
            // OkHttpClient mHttpClient = new OkHttpClient.Builder().build();
            Request request = BulidPostRequest(url, map, headers);
            Response response = mHttpClient.newCall(request).execute();
            if (response != null && response.isSuccessful()) {
                String out = response.body().string();
                return out;
            }
        } catch (Exception e) {
            log.error("doPost ", e);
        }
        return "error";
    }

 

pom我这里引用的是okhttp,

<dependency>
      <artifactId>okhttp</artifactId>
  <name>OkHttp</name>
 <version>3.11.0</version>
</dependency>

 

public static String postJsonData(String jsonParam, String urls) {
        StringBuilder sb = new StringBuilder();
        try {
            // 创建url资源
            URL url = new URL(urls);
            // 建立http连接
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            //设置连接时间为5秒
            //conn.setConnectTimeout(5*1000);
            //设置读取时间为5秒
            //conn.setReadTimeout(5*1000);
            // 设置允许输出
            conn.setDoOutput(true);
            // 设置允许输入
            conn.setDoInput(true);
            // 设置不用缓存
            conn.setUseCaches(false);
            // 设置传递方式
            conn.setRequestMethod("POST");
            // 设置维持长连接
            conn.setRequestProperty("Connection", "Keep-Alive");
            // 设置文件字符集:
            conn.setRequestProperty("Charset", "UTF-8");
            // 转换为字节数组
            byte[] data = jsonParam.getBytes();
            // 设置文件长度
            conn.setRequestProperty("Content-Length", String.valueOf(data.length));
            // 设置文件类型:
            conn.setRequestProperty("contentType", "application/json");
            conn.setRequestProperty("Accept", "application/json");
            // 开始连接请求
            conn.connect();
            OutputStream out = new DataOutputStream(conn.getOutputStream()) ;
            // 写入请求的字符串
            out.write(jsonParam.getBytes());
            out.flush();
            out.close();

            // 请求返回的状态
            if (HttpURLConnection.HTTP_OK == conn.getResponseCode()){
                //System.out.println("连接成功");
                // 请求返回的数据
                InputStream in1 = conn.getInputStream();
                try {
                    String readLine;
                    BufferedReader responseReader=new BufferedReader(new InputStreamReader(in1, StandardCharsets.UTF_8));
                    while((readLine=responseReader.readLine())!=null){
                        sb.append(readLine).append("\n");
                    }
                    responseReader.close();
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return sb.toString();
    }
Map<String, String> params = new HashMap<>();
params.put("openid", openid参数值);
.......
/*post请求*/
String result = postJsonData(JSON.toJSONString(params), "https://http://api.weixin.qq.com/intp/realname/checkrealnameinfo?access_token="+你的ACCESSTOKEN);

 

post请求的时候,本身是可以携带Json的对吧,然后你可以再在接口地址后面拼接参数,这样不就达成要求了么