java封装https的get、post请求

话不多说,直接进入正题。

原生的方法,java8中全部都有

package com.foxconn.weixin_v2.util;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.util.Map;
import java.util.stream.Collectors;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

public class HttpsUtils {

    public static String sendGet(String url, Map<String, String> headers, Map<String, String> body) throws Exception {
        String paramsStr = "";
        if(body!= null){
            paramsStr = body.entrySet().stream()
                .map(entry -> entry.getKey() + "=" + entry.getValue())
                .collect(Collectors.joining("&"));
        }
        if (!paramsStr.isEmpty()) {
            url += "?" + paramsStr;
        }

        URL obj = new URL(url);
        HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
        con.setRequestMethod("GET");
        HostnameVerifier ignoreHostnameVerifier = new MyHostnameVerifier();
        SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
        sslContext.init(null, new TrustManager[]{new MyX509TrustManager1()}, new SecureRandom());
        con.setSSLSocketFactory(sslContext.getSocketFactory());
        con.setHostnameVerifier(ignoreHostnameVerifier);

        if(headers!= null){
            headers.forEach(con::setRequestProperty);
        }

        int responseCode = con.getResponseCode();
        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuilder response = new StringBuilder();
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        return response.toString();
    }

    public static String sendPost(String url, Map<String, String> headers, Map<String, String> data) throws Exception {
        URL obj = new URL(url);
        HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
        con.setRequestMethod("POST");
        HostnameVerifier ignoreHostnameVerifier = new MyHostnameVerifier();
        SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
        sslContext.init(null, new TrustManager[]{new MyX509TrustManager1()}, new SecureRandom());
        con.setSSLSocketFactory(sslContext.getSocketFactory());
        con.setHostnameVerifier(ignoreHostnameVerifier);
        if(headers!= null){
            headers.forEach(con::setRequestProperty);
        }
        String paramsStr = "";
        if(data!= null){
            paramsStr = data.entrySet().stream()
                .map(entry -> entry.getKey() + "=" + entry.getValue())
                .collect(Collectors.joining("&"));
        }


        con.setDoOutput(true);
        con.getOutputStream().write(paramsStr.getBytes());


        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuilder response = new StringBuilder();
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        return response.toString();
    }



}
/**
 * 实现X509TrustManager接口,信任所有
 */
class MyX509TrustManager1 implements X509TrustManager {

    @Override
    public void checkClientTrusted(X509Certificate[] chain, String authType) {

    }

    @Override
    public void checkServerTrusted(X509Certificate[] chain, String authType) {

    }

    @Override
    public X509Certificate[] getAcceptedIssuers() {
        return new X509Certificate[0];
    }
}

/**
 * 实现HostnameVerifier接口,忽略HTTPS主机验证
 */
class MyHostnameVerifier implements HostnameVerifier {

    @Override
    public boolean verify(String hostname, SSLSession session) {
        return true;
    }
}



  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好,Android 中可以使用 HttpURLConnection 类来进行 HTTP 请求的发送,以下是一个简单的封装示例: ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class HttpUtil { public static String sendHttpRequest(String urlStr, String method, String data) { HttpURLConnection connection = null; BufferedReader reader = null; try { URL url = new URL(urlStr); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod(method); connection.setConnectTimeout(5000); connection.setReadTimeout(5000); connection.setDoInput(true); connection.setDoOutput(true); if (method.equals("POST")) { OutputStream outputStream = connection.getOutputStream(); outputStream.write(data.getBytes()); outputStream.flush(); outputStream.close(); } InputStream inputStream = connection.getInputStream(); reader = new BufferedReader(new InputStreamReader(inputStream)); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } return response.toString(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } if (connection != null) { connection.disconnect(); } } return null; } } ``` 您可以使用 `sendHttpRequest` 方法来发送 HTTP 请求,需要传入请求的 URL、请求方法(GET 或 POST)以及请求数据(如果是 POST 请求)。方法会返回响应的数据。例如,发送一个 GET 请求: ```java String response = HttpUtil.sendHttpRequest("http://www.example.com/api", "GET", null); ``` 发送一个 POST 请求: ```java String data = "param1=value1&param2=value2"; String response = HttpUtil.sendHttpRequest("http://www.example.com/api", "POST", data); ``` 当然,上面的代码只是一个简单的封装示例,实际应用中需要进行更多的参数校验、错误处理等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值