URLConnection / HttpURLConnection

(此文章是從網絡上摘抄)
一.使用 java 接口

  1. 創建 URL 以及 URLConnection / HttpURLConnection 對象

  2. 設置連接參數

  3. 連接到服務器

  4. 向服務器寫數據

  5. 從服務器讀取數據
    public class HttpUtils
    {

    private static final int TIMEOUT_IN_MILLIONS = 5000;

    public interface CallBack
    {
    void onRequestComplete(String result);
    }

    /**

    • 異步的Get請求

    • @param urlStr

    • @param callBack
      */
      public static void doGetAsyn(final String urlStr, final CallBack callBack)
      {
      new Thread()
      {
      public void run()
      {
      try
      {
      String result = doGet(urlStr);
      if (callBack != null)
      {
      callBack.onRequestComplete(result);
      }
      } catch (Exception e)
      {
      e.printStackTrace();
      }

       };
      

      }.start();
      }

    /**

    • 異步的Post請求

    • @param urlStr

    • @param params

    • @param callBack

    • @throws Exception
      */
      public static void doPostAsyn(final String urlStr, final String params,
      final CallBack callBack) throws Exception
      {
      new Thread()
      {
      public void run()
      {
      try
      {
      String result = doPost(urlStr, params);
      if (callBack != null)
      {
      callBack.onRequestComplete(result);
      }
      } catch (Exception e)
      {
      e.printStackTrace();
      }

       };
      

      }.start();

    }

    /**

    • Get請求,獲得返回數據

    • @param urlStr

    • @return

    • @throws Exception
      /
      public static String doGet(String urlStr)
      {
      URL url = null;
      HttpURLConnection conn = null;
      InputStream is = null;
      ByteArrayOutputStream baos = null;
      try
      {
      url = new URL(urlStr);
      conn = (HttpURLConnection) url.openConnection();
      conn.setReadTimeout(TIMEOUT_IN_MILLIONS);
      conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);
      conn.setRequestMethod(“GET”);
      conn.setRequestProperty(“accept”, "
      /*");
      conn.setRequestProperty(“connection”, “Keep-Alive”);
      if (conn.getResponseCode() == 200)
      {
      is = conn.getInputStream();
      baos = new ByteArrayOutputStream();
      int len = -1;
      byte[] buf = new byte[128];

           while ((len = is.read(buf)) != -1)
           {
               baos.write(buf, 0, len);
           }
           baos.flush();
           return baos.toString();
       } else
       {
           throw new RuntimeException(" responseCode is not 200 ... ");
       }
      

      } catch (Exception e)
      {
      e.printStackTrace();
      } finally
      {
      try
      {
      if (is != null)
      is.close();
      } catch (IOException e)
      {
      }
      try
      {
      if (baos != null)
      baos.close();
      } catch (IOException e)
      {
      }
      conn.disconnect();
      }

      return null ;

    }

    /**

    • 向指定 URL 發送POST方法的請求

    • @param url

    •        發送請求的 URL
      
    • @param param

    •        請求參數,請求參數應該是 name1=value1&name2=value2 的形式。
      
    • @return 所代表遠程資源的響應結果

    • @throws Exception
      /
      public static String doPost(String url, String param)
      {
      PrintWriter out = null;
      BufferedReader in = null;
      String result = “”;
      try
      {
      URL realUrl = new URL(url);
      // 打開和URL之間的連接
      HttpURLConnection conn = (HttpURLConnection) realUrl
      .openConnection();
      // 設置通用的請求屬性
      conn.setRequestProperty(“accept”, "
      /*");
      conn.setRequestProperty(“connection”, “Keep-Alive”);
      conn.setRequestMethod(“POST”);
      conn.setRequestProperty(“Content-Type”,
      “application/x-www-form-urlencoded”);
      conn.setRequestProperty(“charset”, “utf-8”);
      conn.setUseCaches(false);
      // 發送POST請求必須設置如下兩行
      conn.setDoOutput(true);
      conn.setDoInput(true);
      conn.setReadTimeout(TIMEOUT_IN_MILLIONS);
      conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);

       if (param != null && !param.trim().equals(""))
       {
           // 獲取URLConnection對象對應的輸出流
           out = new PrintWriter(conn.getOutputStream());
           // 發送請求參數
           out.print(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)
      {
      e.printStackTrace();
      }
      // 使用finally塊來關閉輸出流、輸入流
      finally
      {
      try
      {
      if (out != null)
      {
      out.close();
      }
      if (in != null)
      {
      in.close();
      }
      } catch (IOException ex)
      {
      ex.printStackTrace();
      }
      }
      return result;
      }
      }
      二.使用 apache 接口

  6. 創建 HttpClient 以及 GetMethod / PostMethod, HttpRequest等對象;

  7. 設置連接參數;

  8. 執行 HTTP 操作;

  9. 處理服務器返回結果.
    public class HttpUtil {
    public static String get(String uri){
    BufferedReader reader = null;
    StringBuffer sb = null;
    String result = “”;
    HttpClient client = new DefaultHttpClient();
    HttpGet request = new HttpGet(uri);
    try {
    //發送請求,得到響應
    HttpResponse response = client.execute(request);

         //請求成功
         if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
             reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
             sb = new StringBuffer();
             String line = "";
             String NL = System.getProperty("line.separator");
             while((line = reader.readLine()) != null){
                 sb.append(line);
             }
         }
     } catch (ClientProtocolException e) {
         e.printStackTrace();
     } catch (IOException e) {
         e.printStackTrace();
     }
     finally{
         try {
             if (null != reader){
                 reader.close();
                 reader = null;
             }
         } catch (IOException e) {
             e.printStackTrace();
         }
     }
     if (null != sb){
         result =  sb.toString();
     }
     return result;
    

    }
    /**

    • 以post方式發送請求,訪問web

    • @param uri web地址

    • @return 響應數據
      */
      public static String post(String uri,Map< String , String > params){
      BufferedReader reader = null;
      StringBuffer sb = null;
      String result = “”;
      HttpClient client = new DefaultHttpClient();
      HttpPost request = new HttpPost(uri);

      List nvps = new ArrayList ();

      Set keySet = params.keySet();
      for(String key : keySet) {
      nvps.add(new BasicNameValuePair(key, params.get(key)));
      }
      //保存要傳遞的參數
      // List params = new ArrayList();
      //添加參數
      //params.add(new BasicNameValuePair(“parameter”,“以Post方式發送請求”));

      try {
      //設置字符集
      HttpEntity entity = new UrlEncodedFormEntity(nvps,“utf-8”);
      //請求對象
      request.setEntity(entity);
      //發送請求
      HttpResponse response = client.execute(request);

       //請求成功
       if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
           System.out.println("post success");
           reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
           sb = new StringBuffer();
           String line = "";
           String NL = System.getProperty("line.separator");
           while((line = reader.readLine()) != null){
               sb.append(line);
           }
       }
      

      } catch (ClientProtocolException e) {
      e.printStackTrace();
      } catch (IOException e) {
      e.printStackTrace();
      }
      finally{
      try {
      //關閉流
      if (null != reader){
      reader.close();
      reader = null;
      }
      } catch (IOException e) {
      e.printStackTrace();
      }
      }
      if (null != sb){
      result = sb.toString();
      }
      return result;
      }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章