java功能-发送http请求

一、发送json

复制代码
    public void test() throws IOException {
        //参数封装------------------------------------------------------
        Map<String, Object> jsonMap = new HashMap<String, Object>();
        Map<String, Object> params1 = new HashMap<String, Object>();
        List<Object> params2=new ArrayList<>();
        //封装params1
        //封装params2
        //封装jsonMap
        jsonMap.put("sendBasic", params1);
        jsonMap.put("toUsers", params2);
        String json = JSON.toJSONString(jsonMap);
        //---建立连接---------------------------------------------------------------
        URL url = new URL("http://");//请求的路径
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoInput(true); // 设置可输入
        connection.setDoOutput(true); // 设置该连接是可以输出的
        connection.setRequestMethod("POST");// 设置请求方式
        connection.setRequestProperty("Charset", "UTF-8");
        connection.setRequestProperty("Accept-Charset", "utf-8");
        connection.setRequestProperty("Content-Type", "application/json;charset=utf-8");

        //发送参数---------------------------------------------------------------------------
        BufferedOutputStream pw = new BufferedOutputStream(connection.getOutputStream());
        //发送内容转码utf-8 **必写**
        pw.write(json.getBytes("UTF-8"));
        pw.flush();
        pw.close();
        //读取响应数据---------------------------------------------------------------------------
        //输入流转码utf-8  **必写**
        BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
        String line = null;
        StringBuilder result = new StringBuilder();
        while ((line = br.readLine()) != null) { // 读取数据
            result.append(line + "\n");
        }
    }
复制代码

 httpUtil工具类

复制代码
import java.io.*;
import java.net.*;

import javax.net.ssl.HttpsURLConnection;
import javax.servlet.http.HttpServletRequest;

/**
 * http请求工具类
 * 
 */
public class HttpUtil2 {

    /**
     * @Description
     * @Date 15:36 2022-10-13
     * @Param String url
     * @Param boolean isSSL
     * @Param int timeout
     * @return java.net.URLConnection
     */
    private static URLConnection getConn(String url, boolean isSSL,int timeout){
        URL realUrl = null;
        URLConnection connection = null;
        try {
            realUrl = new URL(url);
            realUrl.openConnection();// 打开和URL之间的连接
            // 开发环境打开和URL之间的连接
//            Proxy proxy1 = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("代理ip", 80)); //设置代理
//            URLConnection connection = realUrl.openConnection(proxy1);// 打开和URL之间的连接
            if (isSSL) {
                connection = (HttpsURLConnection) connection;
            }
            // 设置通用的请求属性
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 建立实际的连接
            connection.setConnectTimeout(timeout);//连接失效时间 1s
            connection.connect();
        } catch (Exception e) {
            System.out.println("发送GET请求出现异常!" + e);
            e.printStackTrace();
        }

        return connection;


    }
    
    public static String get(String url){
        return get(url,false);
    }
    
    /**
     * 发送get请求
     * @param url    链接地址
     * @param isSSL    是否是https协议
     * @return        返回响应字符串
     */
    public static String get(String url, boolean isSSL) {

        String result = "";
        BufferedReader in = null;
        try {
            URLConnection connection = getConn(url, false, 1000);
            // 定义 BufferedReader输入流来读取URL的响应
            in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送GET请求出现异常!" + e);
        } finally {
            // 使用finally块来关闭输入流
            try {
                if (in != null) {
                    in.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        return result;
    }


    /**
     * 发送get请求
     * @param url    链接地址
     * @param localPath    保存到本地的全路径
     * @param isSSL    是否是https协议
     * @return        返回响应字符串
     */
    public static String getPic(String url, String localPath,boolean isSSL) {

        String result = "";
        BufferedReader in = null;
        try {
            URLConnection connection = getConn(url, false, 1000);
            InputStream inputStream = connection.getInputStream();
            OutputStream outputStream = new FileOutputStream(localPath);
            byte[] buffer = new byte[1024];
            //每次读取的字符串长度,如果为-1,代表全部读取完毕
            int len = 0;
            //使用一个输入流从buffer里把数据读取出来
            while( (len=inputStream.read(buffer)) != -1 ){
                outputStream.write(buffer,0,len);
            }
            // 关闭输出流
            inputStream.close();
            outputStream.close();


        } catch (Exception e) {
            System.out.println("发送GET请求出现异常!" + e);
        } finally {
            // 使用finally块来关闭输入流
            try {
                if (in != null) {
                    in.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        return result;
    }


    

    /**
     * 发送post请求
     * @param reqUrl
     * @param params
     * @param isSSL
     * @return
     */
    public static String post(String reqUrl, String params, boolean isSSL)
    {
        HttpURLConnection connection = null;
        String responseContent = null;
        try
        {
            URL url = new URL(reqUrl);
            connection = (HttpURLConnection) url.openConnection();
            if (isSSL) {
                connection = (HttpsURLConnection) connection;
            }
            connection.setRequestMethod("POST");
            connection.setConnectTimeout(1000);
            connection.setDoOutput(true);
            connection.setDoOutput(true);
            connection.setUseCaches(false); 
            connection.connect();
            OutputStreamWriter osw = new OutputStreamWriter(connection.getOutputStream(), "utf-8");  
            osw.write(params);  
            osw.flush();  
            osw.close();  

            InputStream in = connection.getInputStream();
            BufferedReader rd = new BufferedReader(new InputStreamReader(in));
            String tempLine = rd.readLine();
            StringBuffer tempStr = new StringBuffer();
            String crlf=System.getProperty("line.separator");
            while (tempLine != null)
            {
                tempStr.append(tempLine);
                tempStr.append(crlf);
                tempLine = rd.readLine();
            }
            responseContent = tempStr.toString();
            rd.close();
            in.close();
        }
        catch (IOException e)
        {
            System.out.println("发送POST请求出现异常!" + e);
        }
        finally
        {
            if (connection != null)
            {
                connection.disconnect();
            }
        }
        return responseContent;
    }
    
    /**
     * 获取http请求体
     * @param request
     * @return
     * @throws IOException
     */
    public static String getHttpBody(HttpServletRequest request) throws IOException{
        BufferedReader br = request.getReader();

        String str, wholeStr = "";
        while((str = br.readLine()) != null){
            wholeStr += str;
        }
        return wholeStr;
    }

    
    public static void main(String[] args) {
    }

}
复制代码

 

posted @   hehehenhen  阅读(88)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示