package com.trs.web2frame.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;

import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.Charset;
import java.util.List;
import java.util.Map;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.DefaultHttpClient;

 

public class Interface {

    static boolean proxySet = false;
    static String proxyHost = "127.0.0.1";
    static int proxyPort = 8087;
     /**
  * 向指定 URL 发送POST方法的请求
  * 
  * @param url
  *   发送请求的 URL
  * @param param
  *   请求参数，请求参数应该是 name1=value1&name2=value2 的形式。
  * @param isproxy
  *    是否使用代理模式
  * @return 所代表远程资源的响应结果
  */
 public static String sendPost(String url, String param,boolean isproxy) {
    OutputStreamWriter out = null;
    BufferedReader in = null;
    String result = "";
    try {
     URL realUrl = new URL(url);
     HttpURLConnection conn = null;
     if(isproxy){//使用代理模式
      @SuppressWarnings("static-access")
      Proxy proxy = new Proxy(Proxy.Type.DIRECT.HTTP, new InetSocketAddress(proxyHost, proxyPort));
      conn = (HttpURLConnection) realUrl.openConnection(proxy);
     }else{
      conn = (HttpURLConnection) realUrl.openConnection();
     }
     // 打开和URL之间的连接
   
     // 发送POST请求必须设置如下两行
     conn.setDoOutput(true);
     conn.setDoInput(true);
     conn.setRequestMethod("POST"); // POST方法
   
   
     // 设置通用的请求属性
   
     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.connect();
   
     // 获取URLConnection对象对应的输出流
     out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
     // 发送请求参数
     if(param!=null&&!param.equals("")){
        out.write(param);
     }
     
     // flush输出流的缓冲
     out.flush();
     // 定义BufferedReader输入流来读取URL的响应
     in = new BufferedReader(
       new InputStreamReader(conn.getInputStream()));
     String line;
     while ((line = in.readLine()) != null) {
      result += line;
     }
    } catch (Exception e) {
     System.out.println("发送 POST 请求出现异常！"+e);
     e.printStackTrace();
    }
    //使用finally块来关闭输出流、输入流
    finally{
     try{
      if(out!=null){
       out.close();
      }
      if(in!=null){
       in.close();
      }
     }
     catch(IOException ex){
      ex.printStackTrace();
     }
    }
    return result;
   } 


   /**
    * 上传视频到Mas服务器端
    * @param lrcFile 文件名
    * @param urlStr  接口url
    * @return
    * @throws Exception
    */
   public static String sendPostWithFile(File lrcFile, String urlStr) throws Exception{

 
    String BOUNDARY = java.util.UUID.randomUUID().toString();
    MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, "--------------------"+BOUNDARY, Charset.defaultCharset());
    //MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, "--------------------"+BOUNDARY, Charset.defaultCharset());

    //multipartEntity.addPart("lyricsUpload", new FileBody(lrcFile));    //lyricsUpload文件名
    multipartEntity.addPart("uf", new FileBody(lrcFile));//（上传文件的文件名称必须是“uf”）
    HttpPost request = new HttpPost(urlStr);    //远程接口
    request.setEntity(multipartEntity);
   // request.addHeader("Content-Type", "multipart/form-data");
    request.addHeader("Content-Type", "multipart/form-data; boundary=--------------------"+BOUNDARY);
    request.addHeader("urlStr", BOUNDARY);



    DefaultHttpClient httpClient = new DefaultHttpClient();

    HttpResponse response = httpClient.execute(request);

    InputStream is = response.getEntity().getContent();

    BufferedReader in = new BufferedReader(new InputStreamReader(is));

    StringBuffer buffer = new StringBuffer();

    String line = "";

    while ((line = in.readLine()) != null) {

        buffer.append(line);

    }

    System.out.println("发送消息收到的返回："+buffer.toString());

    return buffer.toString();

}

/** 
  * 发起http请求获取返回结果 
  * @param req_url 请求地址 
  * @return 
  */
  public static String httpRequest(String req_url) {
    StringBuffer buffer = new StringBuffer(); 
    try { 
     URL url = new URL(req_url); 
     HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection(); 
   
     httpUrlConn.setDoOutput(false); 
     httpUrlConn.setDoInput(true); 
     httpUrlConn.setUseCaches(false); 
   
     httpUrlConn.setRequestMethod("GET"); 
     httpUrlConn.connect(); 
   
     // 将返回的输入流转换成字符串 
     InputStream inputStream = httpUrlConn.getInputStream(); 
     InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8"); 
     BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 
   
     String str = null; 
     while ((str = bufferedReader.readLine()) != null) { 
      buffer.append(str); 
     } 
     bufferedReader.close(); 
     inputStreamReader.close(); 
     // 释放资源 
     inputStream.close(); 
     inputStream = null; 
     httpUrlConn.disconnect(); 
   
    } catch (Exception e) { 
     System.out.println(e.getStackTrace()); 
    } 
    return buffer.toString(); 
   } 

    /** 
  * 发送http请求取得返回的输入流 
  * @param requestUrl 请求地址 
  * @return InputStream 
  */
 public static InputStream httpRequestIO(String requestUrl) { 
    InputStream inputStream = null; 
    try { 
     URL url = new URL(requestUrl); 
     HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection(); 
     httpUrlConn.setDoInput(true); 
     httpUrlConn.setRequestMethod("GET"); 
     httpUrlConn.connect(); 
     // 获得返回的输入流 
     inputStream = httpUrlConn.getInputStream(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return inputStream; 
   }

    /**
  * 向指定URL发送GET方法的请求
  * 
  * @param url
  *   发送请求的URL
  * @param param
  *   请求参数，请求参数应该是 name1=value1&name2=value2 的形式。
  * @return URL 所代表远程资源的响应结果
  */
 public static String sendGet(String url, String param) {
    String result = "";
    BufferedReader in = null;
    try {
     
     String urlNameString="";
     if(param!=null&&!param.equals("")){
        urlNameString= url + "?" + param;
     } else{
        urlNameString=url;
     }
     URL realUrl = new URL(urlNameString);
     // 打开和URL之间的连接
     URLConnection connection = 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)");
     // 建立实际的连接
     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()));
     String line;
     while ((line = in.readLine()) != null) {
      result += 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 result;
   }
}
