java处理http请求操作1——java使用HttpClien发送post请求,json传值

本文介绍了在Java项目开发中如何使用ApacheHttpComponents库的HttpClient发送HTTPPOST请求,包括HTTP/2和WebSocket的支持,以及如何处理JSON参数和响应数据解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在实际项目开发过程中,与第三方对接数据是比较常见的操作,利用java代码处理get和post请求其实就是核心。

使用HttpClient客户端,可以用更简便、更灵活的方式来发送HTTP请求和接收HTTP响应。这个新的客户端旨在替代旧的 HttpURLConnection 类,并提供对HTTP/2协议和WebSocket的支持,不过需要你的项目支持Java 11版本,当然你也可以使用第三方库。

一.HttpClient主要特性:

  1. HTTP/2支持:默认支持HTTP/2协议,同时向后兼容HTTP/1.1。
  2. 同步和异步API:提供了同步和异步两种模式的API,使得处理HTTP请求和响应更加灵活。
  3. 易于使用:API设计简洁,使用方便,更容易创建HTTP请求和处理响应。
  4. WebSocket支持:提供了对WebSocket的支持,使得创建和管理WebSocket连接变得简单。

以下实例基于Java8版本来实现:

二.项目引入第三方库HttpComponents

首先,我们需要在项目中引入HttpComponents库,HtpComponents是Apache的一个开源项目,提供了多个模块,包括HttpClien和HttpCore,HttpClient模块用于 发送HTTP请求和接收HTTP响应,而HttpCore模块则提供了HTTP协议的核心功能。

Apache官方网站:https://hc.apache.org/downloads.cgi

        <!-- java发送请求 -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.8</version>
        </dependency>

三.使用HttpClient发送post请求

利用HttpClient发送post请求,传参方式是json,已经改造为自定义map传值。

  • 发送post请求
    /**
     * 发送post-http请求
     */
    public static String sendPostHttpRequest(String url, Map<String, String> bodyMap) throws Exception {
        url ="http://10.10.0.12:8061/getLocateImmData.action";
        System.out.println("sendHttpRequest请求地址:" + url);
        System.out.println("sendHttpRequest发送参数:" + bodyMap.toString());
        HttpClient client = HttpClientBuilder.create().build();
        HttpPost postRequest = new HttpPost(url);
        List<NameValuePair> nvps = new ArrayList<>();
        for (String key : bodyMap.keySet()) {
            nvps.add(new BasicNameValuePair(key, bodyMap.get(key)));
        }
        postRequest.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));
        int retry = 3;
        HttpResponse execute = null;
        while (retry-- > 0) {
            try {
                execute = client.execute(postRequest);
                break;
            } catch (Exception e) {
                Thread.sleep(5000);
                e.printStackTrace();
            }
        }
        if (execute == null) {
            throw new Exception("接口请求失败");
        }
        String resp = EntityUtils.toString(execute.getEntity(), "UTF-8");
        System.out.println("sendPostHttpRequest接口请求路径为:"+url+",————————请求返回数据:" + resp);
        return resp;
    }
  •  解析响应数据
    /**
     * 解析响应数据
     * @param response
     * @return
     */
    public static String getResponseResultByResponseData(String response) {
        String responseStr = null;
        JSONObject jsonObject = JSON.parseObject(response);
        String status = jsonObject.getString("code");
        if (!"200".equals(status)) {
            System.out.println("status:"+status+"——》"+response);
        } else {
            System.out.println("正常状态按实际业务处理");
        }
        return responseStr;
    }
  • 实际应用实例
    Map<String, String> bodyMap = new HashMap<>();
    bodyMap.put("appkey",appkey);
    bodyMap.put("cardNums",logoInfo.getHelmetSn()+","+blindInfo.getHelmetSn());
    String responseStr = null;
    try {
        responseStr = RequestExternalDataTools.sendPostHttpRequest(null, bodyMap);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
    String resultStr = RequestExternalDataTools.getResponseResultByResponseData(responseStr);
  • 最终控制台结果展示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值