對於使用URL類請求網絡服務器並接受請求進行簡單處理的示例,記錄下學習過程。
-
GET請求
-
代碼示例如下
package testHttpGet; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; public class TestGet { public static void main(String[] args) { new ReadByGet().start(); } static class ReadByGet extends Thread{ @Override public void run() { try { //根據URL地址創建一個URL對象 URL url = new URL("https://easy-mock.com/mock/5c2f632779696b7e93ba23d6/example/testhttpget"); //獲取URL連接,open方法返回一個URLConnection類的對象 URLConnection conn = url.openConnection(); //從連接獲取輸入流,請求的輸入也就是對請求的輸入,即是相應, InputStream in = conn.getInputStream(); InputStreamReader is = new InputStreamReader(in); //將字節流轉換成字符流,方便操作 BufferedReader br = new BufferedReader(is); String line = null; while((line = br.readLine())!=null) { //打印相應的內容 System.out.println(line); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
結果:返回一個html頁面 - 內部類如果在靜態方法里面創建對象必須是靜態內部類,或者將其聲明在外部。
-
POST請求
- 代碼示例如下:
package testHttpGet; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class TestHttpPost { public static void main(String[] args) { new ReadByPost().start(); } static class ReadByPost extends Thread{ @Override public void run() { try { URL url = new URL("https://easy-mock.com/mock/5c2f632779696b7e93ba23d6/example/testhttpget"); //返回一個HttpURLConnection對象,他繼承自URLConnection, HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //設置請求頭 conn.addRequestProperty("encoding", "utf-8"); //設置允許對請求輸入和輸出參數,也就是對請求加上參數 conn.setDoInput(true); conn.setDoOutput(true); //設置請求方式為POST conn.setRequestMethod("POST"); OutputStream out = conn.getOutputStream(); OutputStreamWriter owt = new OutputStreamWriter(out); BufferedWriter bw = new BufferedWriter(owt); //對請求設置參數 bw.write("name=Tom&age=18"); //獲取請求的響應,輸入流 InputStream in = conn.getInputStream(); InputStreamReader is = new InputStreamReader(in); BufferedReader br = new BufferedReader(is); String line = null; while((line = br.readLine()) != null) { System.out.println(line); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
注意點:設置請求參數之前必須先設置請求方式為POST,否則會拋出異常,輸入流和輸出流的先后順序也不能顛倒,因為是先請求再得到響應,所以是輸出流在前,為請求設置請求參數,
輸入流在后,就是得到的響應的具體內容!
