package com.cool.store.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author leoxie
 */
public class Get {

    private static final Logger log = LoggerFactory.getLogger(Get.class);

    private static final Integer connectTimeout = 1000;
    private static final Integer timeout = 5000;

    public static String send(String url, String param) throws IOException {
        return send(url,param,true);
    }

    /**
     * 向指定URL发送GET方法的请求
     *
     * @param url   发送请求的URL
     * @param param 请求参数，请求参数应该是 name1=value1&name2=value2 的形式。
     * @return URL 所代表远程资源的响应结果
     */
    public static String send(String url, String param,boolean hasLog) throws IOException {
        return send(url, param, hasLog, null);
    }

    public static String send(String url, String param, boolean hasLog, HashMap<String,String> headers) throws IOException {
        StringBuilder result = new StringBuilder();
        BufferedReader reader = null;
        HttpURLConnection connection = null;

        try {
            String urlNameString = url + (param.isEmpty()?"":"?" + param);

            log.info("url:"+url);
            log.info("param:"+param);

            URL realUrl = new URL(urlNameString);
            // 打开和URL之间的连接
            connection = (HttpURLConnection)realUrl.openConnection();
            // 设置通用的请求属性
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

            //添加头部信息
            if(headers != null && !headers.isEmpty()){
                for (Map.Entry<String,String> entry:headers.entrySet()) {
                    connection.setRequestProperty(entry.getKey(),entry.getValue());
                }
            }

            connection.setConnectTimeout(connectTimeout);
            connection.setReadTimeout(timeout);
            // 建立实际的连接
            connection.connect();

            // 获取所有响应头字段
            Map<String, List<String>> responseHeader = connection.getHeaderFields();
            // 遍历所有的响应头字段
            if(hasLog) {
                log.info("响应头");
                for (String key : responseHeader.keySet()) {
                    log.info(key + "--->" + responseHeader.get(key));
                }
            }

            // 定义 BufferedReader输入流来读取URL的响应
            reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                result.append(line);
            }

            if(hasLog) {
                log.info("响应结果:" + result.toString());
            }

            return result.toString();
        } finally {
            if (connection != null){
                connection.disconnect();
            }

            if (reader != null) {
                reader.close();
            }
        }
    }

}
