java通过发送参数为json格式的post请求获取api数据

java通过发送参数为json格式的post请求获取api数据

方法1
需要用到的jar包有;
1、fastjson.jar


import com.alibaba.fastjson.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class PostDemo {

    public void doPost() {
        HttpURLConnection httpURLConnection = null;
        try {
            // 1. 获取访问地址URL
            URL url = new URL("http://api.w****u.com");
            // 2. 创建HttpURLConnection对象
            httpURLConnection = (HttpURLConnection) url.openConnection();
            /* 3. 设置请求参数等 */
            // 请求方式  默认 GET
            httpURLConnection.setRequestMethod("POST");
            // 超时时间
            httpURLConnection.setConnectTimeout(3000);
            // 设置是否输出
            httpURLConnection.setDoOutput(true);
            // 设置是否读入
            httpURLConnection.setDoInput(true);
            // 设置是否使用缓存
            httpURLConnection.setUseCaches(false);
            // 设置此 HttpURLConnection 实例是否应该自动执行 HTTP 重定向
            httpURLConnection.setInstanceFollowRedirects(true);
            // 设置请求头,测试此段代码可以省略
            //httpURLConnection.addRequestProperty("sysId","sysId");
            // 设置使用标准编码格式编码参数的名-值对,但以下方法都适用于json,似乎无效
            // 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。
            //httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            // 设置传入参数的格式:请求参数应该是 json格式。
            httpURLConnection.setRequestProperty("Content-Type", "application/json");
            // 连接
            httpURLConnection.connect();
            /* 4. 处理输入输出 */
            // 写入参数到请求中
            //params是参数,内容是json格式
            String params="{\"api_name\":\"stock_basic\",\"token\":\"7d7b****cfa\",\"params\":{\"list_status\":\"L\"},\"fields\":\"\"}";
            OutputStream out = httpURLConnection.getOutputStream();
            out.write(params.getBytes());
            // 简写方式
            //httpURLConnection.getOutputStream().write(params.getBytes());
            out.flush();
            //关闭
            out.close();
            // 从连接中读取响应信息
            String msg = "";
            int code = httpURLConnection.getResponseCode();
            if (code == 200) {
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(httpURLConnection.getInputStream()));
                String line;
                while ((line = reader.readLine()) != null) {
                    msg += line + "\n";
                }
                //关闭
                reader.close();
            }
            // 处理结果
            String js=msg;
            //msg是api返回的字符串,其中中文是乱码,需要通过fastjson转成json对象后中文能正常输出.关键步骤!!!!
            JSONObject jsonObject = JSONObject.parseObject(js);
            System.out.println(jsonObject);
        } catch (IOException e) {
            System.out.println("出错,错误信息:"+e.getLocalizedMessage()+";"+e.getClass());
        }finally {
            // 5. 断开连接
            if (null != httpURLConnection){
                try {
                    httpURLConnection.disconnect();
                }catch (Exception e){
                    System.out.println("httpURLConnection 流关闭异常:"+ e.getLocalizedMessage());
                }
            }
        }
    }
}

方法2
需要用到的jar包有;
1、httpclient-4.5.8.jar
2、httpcore-4.4.1.jar
3、commons-logging-1.1.1.jar
4、fastjson.jar

import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.entity.StringEntity;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class PostDemo2 {
    public void doPost() {
        String result="";
        String url="http://api.waditu.com";
        //创建一个HashMap对象,可以类似json格式,设置键/值
        Map<String,Object> map=new HashMap<>();
        //添加
        map.put("api_name","stock_basic");
        map.put("token","7d7b429b2d47d2c02d93fb52ad057a400df4532c4a057bff348b3cfa");
        map.put("fields","");
        HashMap<String,String> hashMap=new HashMap<>();
        hashMap.put("list_status","L");
        map.put("params",hashMap);
        //创建http客户端
        CloseableHttpClient client= HttpClientBuilder.create().build();
        //设post请求
        HttpPost post = new HttpPost(url);
        try {
        //创建请求实体传参
        StringEntity postingString = new StringEntity(JSONObject.toJSONString(map));
        //设置post请求参数
        post.setEntity(postingString);
        CloseableHttpResponse response= null;
        //执行post请求    
        response = client.execute(post);
        //访问成功状态码为200    
        if(response.getStatusLine().getStatusCode()==200){
            //从响应中获取实体内容,通过EntityUtils(工具)转成字符串
            result= EntityUtils.toString(response.getEntity());
            //响应内容中文会乱码,需要转json对象
            JSONObject jsonObject = JSONObject.parseObject(result);
            System.out.println(jsonObject);
        }else {
            System.out.println("出错!");
        }
        } catch (IOException e) {
            e.printStackTrace();
        }
        }
}

文章只是学习总结,部分内容参考https://blog.csdn.net/weixin_43670802/article/details/102865855
感谢我Moody哥。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值