zoukankan      html  css  js  c++  java
  • HttpUtils

    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    import org.apache.commons.lang3.StringUtils;
    import org.apache.http.Consts;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.protocol.HTTP;
    import org.apache.http.util.EntityUtils;
    
    import javax.servlet.http.HttpServletRequest;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class HttpUtils {
    
        private static String[] IEBrowserSignals = {"MSIE", "Trident", "Edge"};
    
        public static boolean isMSBrowser(HttpServletRequest request) {
            String userAgent = request.getHeader("User-Agent");
            for (String signal : IEBrowserSignals) {
                if (userAgent.contains(signal))
                    return true;
            }
            return false;
        }
    
        public static String doPost(String url, Map<String, String> mapParams) {
            try (CloseableHttpClient httpclient = HttpClients.createDefault()) {
                HttpPost httpPost = new HttpPost(url);
    
                //封装请求参数
                if (mapParams != null) {
                    List<BasicNameValuePair> list = new ArrayList<>();
                    for (Map.Entry<String, String> entry : mapParams.entrySet()) {
                        list.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
                    }
                    UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(list, "utf-8");
                    formEntity.setContentType("Content-Type:application/json");
                    httpPost.setEntity(formEntity);
                }
    
                try (CloseableHttpResponse response = httpclient.execute(httpPost)) {
                    return EntityUtils.toString(response.getEntity());
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        public static String doPost(String url, String jsonParam, String token) {
            try (CloseableHttpClient httpclient = HttpClients.createDefault()) {
                HttpPost httpPost = new HttpPost(url);
                httpPost.setHeader("Content-Type", "application/json;charset=utf8");
                if (StringUtils.isNotBlank(token))
                    httpPost.setHeader("Authorization", token);
    
                StringEntity stringEntity = new StringEntity(jsonParam);
                stringEntity.setContentEncoding("UTF-8");
                stringEntity.setContentType("application/json");
    
                httpPost.setEntity(stringEntity);
    
                try (CloseableHttpResponse response = httpclient.execute(httpPost)) {
                    return EntityUtils.toString(response.getEntity());
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * json方式请求,下载图片
         *
         * @param url
         * @param params
         * @param dirPath
         * @param fileName
         */
        public static void doPost(String url, Map<String, Object> params, String dirPath, String fileName) {
            try (CloseableHttpClient httpclient = HttpClients.createDefault()) {
                HttpPost httpPost = new HttpPost(url);
                httpPost.addHeader(HTTP.CONTENT_TYPE, "application/json");
                String body = JSON.toJSONString(params);
                StringEntity stringEntity = new StringEntity(body);
                stringEntity.setContentType("image/png");
                httpPost.setEntity(stringEntity);
    
                try (CloseableHttpResponse response = httpclient.execute(httpPost)) {
                    InputStream in = response.getEntity().getContent();
                    savePicToDisk(in, dirPath, fileName);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        public static String doGet(String url, Map<String, String> mapParams) {
            try (CloseableHttpClient httpclient = HttpClients.createDefault()) {
    
                //封装请求参数
                if (mapParams != null) {
                    List<BasicNameValuePair> list = new ArrayList<>();
                    for (Map.Entry<String, String> entry : mapParams.entrySet()) {
                        list.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
                    }
                    url = url + "?" + EntityUtils.toString(new UrlEncodedFormEntity(list, Consts.UTF_8));
                }
    
                HttpGet httpget = new HttpGet(url);
                try (CloseableHttpResponse response = httpclient.execute(httpget)) {
                    return EntityUtils.toString(response.getEntity());
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 创建文件
         *
         * @param in
         * @param dirPath
         * @param fileName
         */
        private static void savePicToDisk(InputStream in, String dirPath, String fileName) {
            try {
                File dir = new File(dirPath);
                if (!dir.exists()) {
                    boolean bool = dir.mkdirs();
                }
    
                File file = new File(dirPath, fileName);
                FileOutputStream fos = new FileOutputStream(file);
                byte[] b = new byte[1024];
                int nRead = 0;
                while ((nRead = in.read(b)) != -1) {
                    fos.write(b, 0, nRead);
                }
    
                fos.flush();
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
        }
    
        public static void main(String[] args) {
            String url = "https://api.weixin.qq.com/sns/jscode2session";
            Map<String, String> map = new HashMap<>();
            map.put("appid", "APPID");
            map.put("secret", "SECRET");
            map.put("js_code", "JSCODE");
            map.put("grant_type", "authorization_code");
            JSONObject jsonObject = JSON.parseObject(HttpUtils.doGet(url, map));
            if (jsonObject != null) {
                System.out.println(jsonObject.toJSONString());
                if (jsonObject.containsKey("openid")) {
                    String openid = jsonObject.getString("openid");
                    String sessionKey = jsonObject.getString("session_key");
                }
            }
        }
    }
                    boolean isMSIE = HttpUtils.isMSBrowser(request);
                    if (isMSIE) {
                        //IE浏览器的乱码问题解决
                        file_name = URLEncoder.encode(filename, "UTF-8");
                    } else {
                       //万能乱码问题解决
                        file_name = new String(filename.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
                    }

    HttpClient关闭控制台的DEBUG输出

    resources下添加logback.xml

    <configuration debug="false">
        <!--以下三行一定注释掉,否则还会打印部分debug日志,o.apache.commons.httpclient.HttpClient-->
        <!--<logger name="org.apache" level="DEBUG" />-->
        <!--<logger name="org.apache.http.wire" level="DEBUG" />-->
        <!--<logger name="org.apache.http.headers" level="INFO" />-->
    
        <property name="CONSOLE_LOG_PATTERN"
                  value="%date{yyyy-MM-dd HH:mm:ss}  %highlight(%-5level) %magenta(%-4relative) --- [%yellow(%15.15thread)] %cyan(%-40.40logger{39}) : %msg%n"/>
    
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            </encoder>
        </appender>
    
        <root level="ERROR">
            <appender-ref ref="STDOUT"/>
        </root>
    </configuration>
  • 相关阅读:
    Pytest单元测试框架——Pytest+Allure+Jenkins的应用
    Postman+Newman+Git+Jenkins接口自动化测试
    Pytest单元测试框架——Pytest简介
    unittest单元测试框架
    Postman学习笔记(二)
    CukeTest+Puppeteer的Web自动化测试(二)
    Postman学习笔记(一)
    CukeTest+Puppeteer的Web自动化测试(一)
    Puppeteer笔记(八):Puppeteer执行自定义Javascript方法
    Puppeteer笔记(七):Puppeteer切换浏览器TAB页
  • 原文地址:https://www.cnblogs.com/xiaomaoyvtou/p/12626361.html
Copyright © 2011-2022 走看看