• Http请求get和post调用


    工作中会遇到远程调用接口,需要编写Http请求的共通类

    以下是自己总结的Http请求代码

    package com.gomecar.index.common.utils;
    
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.util.EntityUtils;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.URL;
    import java.net.URLConnection;
    import java.nio.charset.Charset;
    import java.util.*;
    
    public class HttpUtils {
    
        /**
         * 向指定URL发送GET方法的请求
         * 
         * @param url
         *            发送请求的URL
         * @param param
         *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
         * @param timeout 连接超时时间 /单位毫秒
         * @return URL 所代表远程资源的响应结果
         */
        public static String sendGet(String url, String param,int timeout) {
            StringBuffer resultBuf = new StringBuffer();
    
            BufferedReader in = null;
            try {
                String urlNameString = url + "?" + param;
                URL realUrl = new URL(urlNameString);
                // 打开和URL之间的连接
                URLConnection connection = realUrl.openConnection();
                // 设置通用的请求属性
                // connection.setRequestProperty("accept", "*/*");
                // connection.setRequestProperty("connection", "Keep-Alive");
                connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                connection.setConnectTimeout(timeout);
                // 建立实际的连接
                connection.connect();
                // 获取所有响应头字段
                // Map<String, List<String>> map = connection.getHeaderFields();
                // 遍历所有的响应头字段
                // for (String key : map.keySet()) {
                // System.out.println(key + "--->" + map.get(key));
                // }
                // 定义 BufferedReader输入流来读取URL的响应
                in = new BufferedReader(new InputStreamReader(connection.getInputStream(), Charset.forName("UTF-8")));
                String line;
                while ((line = in.readLine()) != null) {
                    resultBuf.append(line);
                }
            } catch (Exception e) {
                // System.out.println("发送GET请求出现异常!" + e);
                e.printStackTrace();
            }
            // 使用finally块来关闭输入流
            finally {
                try {
                    if (in != null) {
                        in.close();
                    }
                } catch (Exception e2) {
                    e2.printStackTrace();
                }
            }
            return resultBuf.toString();
        }
    
        public static String assemParam(Map<String, Object> param) {
            Set<String> keys = param.keySet();
            StringBuffer sb = new StringBuffer();
            for (Iterator<String> iter = keys.iterator(); iter.hasNext();) {
                String key = iter.next();
                sb.append(key);
                sb.append("=");
                sb.append(param.get(key));
                if (iter.hasNext()) {
                    sb.append("&");
                }
            }
            return sb.toString();
        }
    
        /**
         * 向指定 URL 发送POST方法的请求
         *
         * @param url
         *            发送请求的 URL
         * @param req
         *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
         * @param timeout 连接超时时间 /单位毫秒
         * @return 所代表远程资源的响应结果
         */
        public static String sendPost(String url, Map req,int timeout) {
            PrintWriter out = null;
            BufferedReader in = null;
            String result = "";
            try {
                URL realUrl = new URL(url);
                // 打开和URL之间的连接
                URLConnection conn = realUrl.openConnection();
                // 设置通用的请求属性
                conn.setRequestProperty("accept", "*/*");
                conn.setRequestProperty("connection", "Keep-Alive");
                conn.setRequestProperty("user-agent",
                        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
                conn.setRequestProperty("content-type", "text/json");
                conn.setRequestProperty("method","POST");
                // 发送POST请求必须设置如下两行
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.setConnectTimeout(timeout);//连接超时时间
                // 获取URLConnection对象对应的输出流
                StringBuilder sb=new StringBuilder();
                Iterator<String> iterator = req.keySet().iterator();
                while (iterator.hasNext()) {
                    String key=iterator.next().toString();
                    String val=req.get(key).toString();
                    sb.append(key);
                    sb.append("=");
                    sb.append(val);
                    if (iterator.hasNext()) {
                        sb.append("&");
                    }
                }
    
    
                out = new PrintWriter(conn.getOutputStream());
                // 发送请求参数
                out.print(sb);
                // flush输出流的缓冲
                out.flush();
                // 定义BufferedReader输入流来读取URL的响应
                in = new BufferedReader(
                        new InputStreamReader(conn.getInputStream(),Charset.forName("utf-8")));
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
            } catch (Exception e) {
                System.out.println("发送 POST 请求出现异常!"+e+" url="+url+" param="+req+" time="+timeout);
                e.printStackTrace();
            }
            //使用finally块来关闭输出流、输入流
            finally{
                try{
                    if(out!=null){
                        out.close();
                    }
                    if(in!=null){
                        in.close();
                    }
                }
                catch(IOException ex){
                    ex.printStackTrace();
                }
            }
            return result;
        }
    
        /**
         * 向指定 URL 发送POST方法的请求
         *
         * @param url 发送请求的 URL
         * @param req 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
         * @return 所代表远程资源的响应结果
         */
        public static String sendPost(String url, String json) {
            PrintWriter out = null;
            BufferedReader in = null;
            String result = "";
            try {
                URL realUrl = new URL(url);
                // 打开和URL之间的连接
                URLConnection conn = realUrl.openConnection();
                // 设置通用的请求属性
                conn.setRequestProperty("accept", "*/*");
                conn.setRequestProperty("connection", "Keep-Alive");
                conn.setRequestProperty("user-agent",
                        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
                conn.setRequestProperty("content-type", "text/json");
                // 发送POST请求必须设置如下两行
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.setConnectTimeout(5000);//连接超时时间
                // 获取URLConnection对象对应的输出流
                out = new PrintWriter(conn.getOutputStream());
                // 发送请求参数
                out.print(json);
                // flush输出流的缓冲
                out.flush();
                // 定义BufferedReader输入流来读取URL的响应
                in = new BufferedReader(
                        new InputStreamReader(conn.getInputStream(), Charset.forName("utf-8")));
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
            } catch (Exception e) {
                System.out.println("发送 POST 请求出现异常!"+e+" url="+url);
                e.printStackTrace();
            }
            //使用finally块来关闭输出流、输入流
            finally {
                try {
                    if (out != null) {
                        out.close();
                    }
                    if (in != null) {
                        in.close();
                    }
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
            return result;
        }
    
        public static void main(String[] args) {
            // http://10.144.48.82/mobile_api/serviceApi?method=product.ProductService.getGoodsInfo&skuNo=8001019816
    
            String re = new HttpUtils().sendGet("http://10.144.48.82/serviceApi",
                    "method=product.getGoodsInfo&skuNo=8001019816",60);
            // System.out.println(re);
        }
    
    
        public String post(String url, String encoding, Map<String,String> map){
            boolean checkFlag = false;
    
            HttpPost post = null;
            DefaultHttpClient httpClient = new DefaultHttpClient();
            try {
    
                //String url = "http://localhost:8081/batchCates";//Constant.PERMISSION_URL;
    
                post = new HttpPost(url);
                List<BasicNameValuePair> postData = new ArrayList<BasicNameValuePair>();
                for (Map.Entry<String, String> entry : map.entrySet()) {
                    postData.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
                    //LOG.info(entry.getValue());
                }
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(postData,encoding);
                post.setEntity(entity);
                HttpResponse response = httpClient.execute(post);
                //LOG.info(System.currentTimeMillis() - startTime);
                HttpEntity resEntiy = response.getEntity();
                String result = EntityUtils.toString(resEntiy);
               return result;
    
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return "";
    
        }
    
    }
  • 相关阅读:
    mysql基于Altas读写分离并实现高可用
    mysql基于GTIDS复制
    mysql创建用户账号出错
    mysql存储引擎
    mysql读写分离
    for each ;for in;for of 三者的区别
    关于编程的历史
    用indexof来统计字符出现的次数
    正则表达式
    DOM,BOM
  • 原文地址:https://www.cnblogs.com/shoutn/p/7800937.html
Copyright © 2020-2023  润新知