Java實現Http的Post、Get、代理訪問請求

  • 2019 年 12 月 12 日
  • 筆記

Java實現Http的訪問請求。包含基本的Get訪問、Post訪問。Post包含使用代理模式訪問

package com.nit.utils;    import java.io.BufferedReader;  import java.io.IOException;  import java.io.InputStream;  import java.io.InputStreamReader;  import java.io.OutputStreamWriter;  import java.io.UnsupportedEncodingException;  import java.net.HttpURLConnection;  import java.net.InetSocketAddress;  import java.net.Proxy;  import java.net.URL;  import java.net.URLConnection;  import java.util.List;  import java.util.Map;    /**   * Http請求工具類   */  public class HttpRequestUtil {      static boolean proxySet = false;      static String proxyHost = "127.0.0.1";      static int proxyPort = 8087;      /**       * 編碼       * @param source       * @return       */      public static String urlEncode(String source,String encode) {          String result = source;          try {              result = java.net.URLEncoder.encode(source,encode);          } catch (UnsupportedEncodingException e) {              e.printStackTrace();              return "0";          }          return result;      }      public static String urlEncodeGBK(String source) {          String result = source;          try {              result = java.net.URLEncoder.encode(source,"GBK");          } catch (UnsupportedEncodingException e) {              e.printStackTrace();              return "0";          }          return result;      }      /**       * 發起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 = 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;      }        /**       * 向指定 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.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");                conn.connect();                // 獲取URLConnection對象對應的輸出流              out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");              // 發送請求參數              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;      }        public static void main(String[] args) {          //demo:代理訪問          String url = "http://api.adf.ly/api.php";          String para = "key=youkeyid&youuid=uid&advert_type=int&domain=adf.ly&url=http://somewebsite.com";            String sr=HttpRequestUtil.sendPost(url,para,true);          System.out.println(sr);      }    }

Tags: