HttpRequest.java 12.9 KB
package tools;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StringReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;

import org.apache.commons.io.IOUtils;
import org.aspectj.weaver.ast.Call;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class HttpRequest {

	/**
	 * 向指定URL发送GET方法的请求
	 * 
	 * @param url
	 *            发送请求的URL
	 * @param param
	 *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
	 * @return URL 所代表远程资源的响应结果
	 * @throws Exception
	 * @throws MalformedURLException
	 */
	/*
	 * public static String queryWebservice2(String url) throws
	 * MalformedURLException, Exception{ String xml = ""+
	 * "<?xml version=\"1.0\" encoding=\"utf-8\"?>"+
	 * "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
	 * + "<soap:Body>"+
	 * "<GetShipmentStatusByBillId xmlns=\"http://ShipmentStatus\">"+
	 * "<Freight>172-20966794</Freight>"+ "<Xquery>BA8EC</Xquery>"+
	 * "</GetShipmentStatusByBillId>"+ "</soap:Body>"+ "</soap:Envelope>";
	 * Client c = new Client(new URL(url)); Object[] o =
	 * c.invoke("GetShipmentStatusByBillId", new Object[]{xml}); if(o != null)
	 * return o[0].toString(); return null; }
	 */
	public static String queryWebservice(String url) {
		PrintWriter out = null;
		BufferedReader in = null;
		String result = "";
		System.out.println("start!");
		try {
			URL realUrl = new URL(url);
			// 打开和URL之间的连接
			URLConnection conn = realUrl.openConnection();
			HttpURLConnection httpConn = (HttpURLConnection) conn;
			httpConn.setDoInput(true);
			httpConn.setDoOutput(true);
			httpConn.setRequestMethod("POST");
			httpConn.setRequestProperty("Host", "10.50.3.66");
			// httpConn.setRequestProperty("Content-Type",
			// "application/soap+xml; charset=utf-8");
			httpConn.setRequestProperty("Connect-Type", "text/xml;charset=UTF-8");
			// httpConn.setRequestProperty("SOAPAction",
			// "http://ShipmentStatus/GetShipmentStatusByBillId");
			String data = "" + "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
					+ "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
					+ "<soap:Body>" + "<GetShipmentStatusByBillId xmlns=\"http://ShipmentStatus\">"
					+ "<Freight>172-20966794</Freight>" + "<Xquery>BA8EC</Xquery>" + "</GetShipmentStatusByBillId>"
					+ "</soap:Body>" + "</soap:Envelope>";
			httpConn.setRequestProperty("Content-Length", data.length() + "");
			OutputStream out1 = httpConn.getOutputStream();
			out1.write(data.getBytes());
			System.out.println("response code:" + httpConn.getResponseCode());
			if (httpConn.getResponseCode() == 200) {
				// 获得输入流
				InputStream in1 = httpConn.getInputStream();
				// 使用输入流的缓冲区
				BufferedReader reader = new BufferedReader(new InputStreamReader(in1));
				StringBuffer sb = new StringBuffer();
				String line = null;
				// 读取输入流
				while ((line = reader.readLine()) != null) {
					sb.append(line);
				}
				/*
				 * //创建sax的读取器 SAXReader saxReader = new SAXReader(); //创建文档对象
				 * Document doc = saxReader.read(new
				 * StringReader(sb.toString())); //获得请求响应return元素 List<Element>
				 * eles = doc.selectNodes("//return"); for(Element ele : eles){
				 * System.out.println(ele.getText()); }
				 */
				return sb.toString();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("end");
		return null;

	}

	public static String sendGet(String url, String param) {
		String result = "";
		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("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;
	}

	public static String sendPost2(String url, String Params) {
		OutputStreamWriter out = null;
		BufferedReader reader = null;
		String response = "";
		try {
			URL httpUrl = null; // HTTP URL类 用这个类来创建连接
			// 创建URL
			httpUrl = new URL(url);
			// 建立连接
			HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection();
			conn.setRequestMethod("POST");
			conn.setRequestProperty("Content-Type", "application/json");
			conn.setRequestProperty("connection", "keep-alive");
			conn.setUseCaches(false);// 设置不要缓存
			conn.setInstanceFollowRedirects(true);
			conn.setDoOutput(true);
			conn.setDoInput(true);
			conn.connect();
			// POST请求
			out = new OutputStreamWriter(conn.getOutputStream());
			out.write(Params);
			out.flush();
			// 读取响应
			reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
			String lines;
			while ((lines = reader.readLine()) != null) {
				lines = new String(lines.getBytes(), "utf-8");
				response += lines;
			}
			reader.close();
			// 断开连接
			conn.disconnect();

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

		return response;
	}

	/**
	 * 向指定 URL 发送POST方法的请求
	 * 
	 * @param url
	 *            发送请求的 URL
	 * @param param
	 *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
	 * @return 所代表远程资源的响应结果
	 */
	public static String sendPost(String url, String param) {
		PrintWriter out = null;
		BufferedReader in = null;
		String result = "";
		try {
			URL realUrl = new URL(url);
			// 打开和URL之间的连接
			URLConnection conn = realUrl.openConnection();
			// 设置通用的请求属性
			conn.setRequestProperty("Origin", "chrome-extension://zejoelaoggembcahzgimdiliamlcdmfm");
			conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36");
			conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
			conn.setRequestProperty("Accept", "*/*");
			conn.setRequestProperty("Accept-Encoding", "gzip,deflate,utf-8");
			conn.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.9");
			
			
			//conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
			//conn.setRequestProperty("Cache-Control", "no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
			//conn.setRequestProperty("Content-Encoding", "gzip");
			//conn.setRequestProperty("Content-Type", "text/html;charset=UTF-8");
			//conn.setRequestProperty("accept", "*/*");
			//conn.setRequestProperty("connection", "Keep-Alive");
			
			
			//conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
			// 发送POST请求必须设置如下两行
			conn.setDoOutput(true);
			conn.setDoInput(true);
			// 获取URLConnection对象对应的输出流
			out = new PrintWriter(conn.getOutputStream());
//			out = new OutputStreamWriter(conn.getOutputStream());
			// 发送请求参数
			out.print(param);
//			out.write(param);
			// flush输出流的缓冲
			out.flush();
			// 定义BufferedReader输入流来读取URL的响应
			in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
//			in = conn.getInputStream();
			String line;
			/*byte buffer[] = new byte[1024];
			while(in.read(buffer) > 0)
			{
				result += new String(buffer, "UTF-8");
			}*/
			while ((line = in.readLine()) != null) {
				//System.out.println("hello");
				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;
	}
	
	
	public static String sendPost3(String url,String Params){
        OutputStreamWriter out = null;
        BufferedReader reader = null;
        String response="";
        try {
            URL httpUrl = null; //HTTP URL类 用这个类来创建连接
            //创建URL
            httpUrl = new URL(url);
            //建立连接
            HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("connection", "keep-alive");
            conn.setUseCaches(false);//设置不要缓存
            conn.setInstanceFollowRedirects(true);
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.connect();
            //POST请求
            out = new OutputStreamWriter(
                    conn.getOutputStream());
            out.write(Params);
            out.flush();
            //读取响应
            reader = new BufferedReader(new InputStreamReader(
                    conn.getInputStream()));
            String lines;
            while ((lines = reader.readLine()) != null) {
                lines = new String(lines.getBytes(), "utf-8");
                response+=lines;
            }
            reader.close();
            // 断开连接
            conn.disconnect();

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

        return response;
    }
	
	
	   public static String doHttpPost(String URL, String xmlInfo) {
	        byte[] xmlData = xmlInfo.getBytes();
	        InputStream instr = null;
	        java.io.ByteArrayOutputStream out = null;
	        try {
	            URL url = new URL(URL);
	            URLConnection urlCon = url.openConnection();
	            urlCon.setDoOutput(true);
	            urlCon.setDoInput(true);
	            urlCon.setUseCaches(false);
	            urlCon.setRequestProperty("content-Type", "application/json");
	            urlCon.setRequestProperty("charset", "utf-8");
	            urlCon.setRequestProperty("Content-length",
	                    String.valueOf(xmlData.length));
	            System.out.println(String.valueOf(xmlData.length));
	            DataOutputStream printout = new DataOutputStream(
	                    urlCon.getOutputStream());
	            printout.write(xmlData);
	            printout.flush();
	            printout.close();
	            instr = urlCon.getInputStream();
	            byte[] bis = IOUtils.toByteArray(instr);
	            String ResponseString = new String(bis, "UTF-8");
	            if ((ResponseString == null) || ("".equals(ResponseString.trim()))) {
	                System.out.println("返回空");
	            }
	            System.out.println("返回数据为:" + ResponseString);
	            return ResponseString;

	        } catch (Exception e) {
	            e.printStackTrace();
	            return "0";
	        } finally {
	            try {
	                out.close();
	                instr.close();

	            } catch (Exception ex) {
	                return "0";
	            }
	        }
	    }
}