java发送http请求的几种方式,调用第三方接口的方法:HttpUtil、HttpURLConnection等

参考:https://blog.csdn.net/yubin1285570923/article/details/126225347

可以直接使用HttpRequest调用(httputil底层封装的方法)

put请求

 public Boolean saveResult(SaveResultDto saveResultDto) {
        String url = forecastUrl + "/yb/fldplan/" + saveResultDto.getResultCode()+"?stcd="+saveResultDto.getStcd()+
                "&st="+saveResultDto.getSt() +"&et="+saveResultDto.getEt() +"&areap="+saveResultDto.getAreap() + "&q="+saveResultDto.getQ();
        String body = HttpRequest.put(url).execute().body();
        return "ok".equals(body.toLowerCase());
    }

post带请求头

String value = MySM4Utils.encryptEcb(login.getDataKey(), json, MySM4Utils.ENCODING);
JSONObject jsonObject = new JSONObject();
jsonObject.putOnce("data", value);
String post = HttpRequest.post(login.getDataUrl()).header("Authorization", "Bearer "+ login.getAccessToken()).body(jsonObject.toString()).execute().body();

get、delete类似…

java原生HttpURLConnection

使用JDK原生提供的net,无需其他jar包,代码如下:

import com.alibaba.fastjson.JSON;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
 
public class HttpTest1 {
 
    public static void main(String[] args) {
        HttpURLConnection con = null;
 
        BufferedReader buffer = null;
        StringBuffer resultBuffer = null;
 
        try {
            URL url = new URL("http://10.30.10.151:8012/gateway.do");
            //得到连接对象
            con = (HttpURLConnection) url.openConnection();
            //设置请求类型
            con.setRequestMethod("POST");
            //设置Content-Type,此处根据实际情况确定
            con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            //允许写出
            con.setDoOutput(true);
            //允许读入
            con.setDoInput(true);
            //不使用缓存
            con.setUseCaches(false);
            OutputStream os = con.getOutputStream();
            Map paraMap = new HashMap();
            paraMap.put("type", "wx");
            paraMap.put("mchid", "10101");
            //组装入参
            os.write(("consumerAppId=test&serviceName=queryMerchantService&params=" + JSON.toJSONString(paraMap)).getBytes());
            //得到响应码
            int responseCode = con.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) {
                //得到响应流
                InputStream inputStream = con.getInputStream();
                //将响应流转换成字符串
                resultBuffer = new StringBuffer();
                String line;
                buffer = new BufferedReader(new InputStreamReader(inputStream, "GBK"));
                while ((line = buffer.readLine()) != null) {
                    resultBuffer.append(line);
                }
                System.out.println("result:" + resultBuffer.toString());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

独立jar包半原生HttpClient

需要用到commons-httpclient-3.1.jar,maven依赖如下:

<dependency>
    <groupId>commons-httpclient</groupId>
    <artifactId>commons-httpclient</artifactId>
    <version>3.1</version>
</dependency>
import com.alibaba.fastjson.JSON;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
 
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
 
public class HttpTest2 {
 
    public static void main(String[] args) {
        HttpClient httpClient = new HttpClient();
        PostMethod postMethod = new PostMethod("http://10.30.10.151:8012/gateway.do");
 
        postMethod.addRequestHeader("accept", "*/*");
        //设置Content-Type,此处根据实际情况确定
        postMethod.addRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        //必须设置下面这个Header
        //添加请求参数
        Map paraMap = new HashMap();
        paraMap.put("type", "wx");
        paraMap.put("mchid", "10101");
        postMethod.addParameter("consumerAppId", "test");
        postMethod.addParameter("serviceName", "queryMerchantService");
        postMethod.addParameter("params", JSON.toJSONString(paraMap));
        String result = "";
        try {
            int code = httpClient.executeMethod(postMethod);
            if (code == 200){
                result = postMethod.getResponseBodyAsString();
                System.out.println("result:" + result);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

看一下我实际应用的例子

 public String getOsmoticPressureToken() {
        try {
            String newUrl = tokenUrlPath + "?tenantId=000000&username=lgm&password=e10adc3949ba59abbe56e057f20f883e&grant_type=password&scope=all&type=account";
            URL url = new URL(newUrl);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            //请求方式是POST
            urlConnection.setRequestMethod("POST");
            // Post 请求不能使用缓存
            urlConnection.setUseCaches(false);
            // http正文内,因此需要设为true
            urlConnection.setDoOutput(Boolean.TRUE);
            urlConnection.setDoInput(Boolean.TRUE);
            //设置请求头
            urlConnection.setRequestProperty("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0");
            urlConnection.setRequestProperty("Tenant-Id", "000000");
            urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            urlConnection.setInstanceFollowRedirects(false);
            //建立连接
            urlConnection.connect();
            String line = null;
            StringBuilder result = new StringBuilder();

            if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "UTF-8"));// 发送http请求
                // 循环读取流
                while ((line = reader.readLine()) != null) {
                    result.append(line).append(System.getProperty("line.separator"));
                }
//                System.out.println(result.toString());
                //如果返回值是标准的JSON字符串可以像我这样给他进行转换
                HashMap<String, Object> parseObject = JSONObject.parseObject(String.valueOf(result), HashMap.class);
                redisTemplate.opsForValue().set("OsmoticToken",parseObject.get("access_token"));
            }else{
                BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getErrorStream(), "UTF-8"));// 发送http请求
                // 循环读取流
                while ((line = reader.readLine()) != null) {
                    result.append(line).append(System.getProperty("line.separator"));
                }
                System.out.println(result.toString());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

CloseableHttpClient

需要用到httpclient-4.5.6.jar,maven依赖如下:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.6</version>
</dependency>
import com.alibaba.fastjson.JSON;
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
 
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
public class HttpTest3 {
 
    public static void main(String[] args) {
        int timeout = 120000;
        CloseableHttpClient httpClient = HttpClients.createDefault();
        RequestConfig defaultRequestConfig = RequestConfig.custom().setConnectTimeout(timeout)
                .setConnectionRequestTimeout(timeout).setSocketTimeout(timeout).build();
        HttpPost httpPost = null;
        List<NameValuePair> nvps = null;
        CloseableHttpResponse responses = null;// 命名冲突,换一个名字,response
        HttpEntity resEntity = null;
        String result;
        try {
            httpPost = new HttpPost("http://10.30.10.151:8012/gateway.do");
            httpPost.setConfig(defaultRequestConfig);
 
            Map paraMap = new HashMap();
            paraMap.put("type", "wx");
            paraMap.put("mchid", "10101");
            nvps = new ArrayList<NameValuePair>();
            nvps.add(new BasicNameValuePair("consumerAppId", "test"));
            nvps.add(new BasicNameValuePair("serviceName", "queryMerchantService"));
            nvps.add(new BasicNameValuePair("params", JSON.toJSONString(paraMap)));
            httpPost.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8));
 
            responses = httpClient.execute(httpPost);
            resEntity = responses.getEntity();
            result = EntityUtils.toString(resEntity, Consts.UTF_8);
            EntityUtils.consume(resEntity);
            System.out.println("result:" + result);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                responses.close();
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

spring体系自带RestTemplate

RestTemplate 是由Spring提供的一个HTTP请求工具。比传统的Apache和HttpCLient便捷许多,能够大大提高客户端的编写效率。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
 
@Configuration
public class RestTemplateConfig {
 
    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory factory){
        return new RestTemplate(factory);
    }
 
    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setConnectTimeout(15000);
        factory.setReadTimeout(5000);
        return factory;
    }
}
 
 
 
@Autowired
RestTemplate restTemplate;
 
@Test
public void postTest() throws Exception {
    MultiValueMap<String, String> requestEntity = new LinkedMultiValueMap<>();
    Map paraMap = new HashMap();
    paraMap.put("type", "wx");
    paraMap.put("mchid", "10101");
    requestEntity.add("consumerAppId", "test");
    requestEntity.add("serviceName", "queryMerchant");
    requestEntity.add("params", JSON.toJSONString(paraMap));
    RestTemplate restTemplate = new RestTemplate();
    System.out.println(restTemplate.postForObject("http://10.30.10.151:8012/gateway.do",         requestEntity, String.class));
}

HttpUtil hutu工具包封装的此模块基于JDK的HttpUrlConnection封装完成

get请求

// 最简单的HTTP请求,可以自动通过header等信息判断编码,不区分HTTP和HTTPS

String result1= HttpUtil.get("https://www.baidu.com");

// 当无法识别页面编码的时候,可以自定义请求页面的编码
String result2= HttpUtil.get("https://www.baidu.com", CharsetUtil.CHARSET_UTF_8);

//可以单独传入http参数,这样参数会自动做URL编码,拼接在URL中
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("city", "北京");

String result3= HttpUtil.get("https://www.baidu.com", paramMap);

post请求

HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("city", "北京");

String result= HttpUtil.post("https://www.baidu.com", paramMap);
response = HttpUtil.createPost(hardwareUrl + "/equipment/data/setEquipment")
                    .addHeaders(headers).form(map).timeout(30000).execute().body();
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用Hutool库发送HTTP请求的步骤如下: 1. 添加Hutool的依赖到你的项目中。你可以通过Maven或Gradle等依赖管理工具来添加依赖。 2. 导入相关的类:在Java类中,你需要导入Hutool的HttpUtil类。可以使用以下代码来导入: ```java import cn.hutool.http.HttpUtil; ``` 3. 发送HTTP请求:你可以使用HttpUtil类的get、post、put、delete等方法发送HTTP请求。例如,发送一个GET请求,你可以使用以下代码: ```java String result = HttpUtil.get("http://www.example.com/api"); ``` 这将发送一个GET请求到http://www.example.com/api并返回响应结果。你可以使用post、put、delete等方法发送其他类型的请求。 4. 添加请求参数:如果你需要向请求中添加参数,可以使用HttpUtil类的其他方法。例如,如果你需要向POST请求中添加参数,可以使用以下代码: ```java HashMap<String, Object> paramMap = new HashMap<>(); paramMap.put("username", "testuser"); paramMap.put("password", "testpass"); String result = HttpUtil.post("http://www.example.com/api", paramMap); ``` 这将向http://www.example.com/api发送一个POST请求,并在请求中包含参数"username"和"password"。 5. 处理响应结果:你可以使用HttpUtil类返回的字符串来处理响应结果。你可以将其转换为JSON对象、XML对象等。例如,你可以使用以下代码将响应结果转换为JSON对象: ```java JSONObject json = JSONUtil.parseObj(result); ``` 这将把响应结果解析为JSON对象,你可以使用该对象来处理响应数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杵意

谢谢金主打赏呀!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值