1. 程式人生 > >HttpUrlConnection 和 okhttp 請求資料

HttpUrlConnection 和 okhttp 請求資料



C/S  客戶端+伺服器


一,HttpUrlConnection


在客戶端用於訪問伺服器去提交請求, 在從伺服器獲取響應的類


GET方式 步驟:


1, 得到URL物件


  URL url = new URL("path......");


2, 根據URL物件開啟HttpUrlConnection物件


  HttpUrlConnection conn = (HttpUrlConnection)url.openConnection();


3, 設定請求方式(可以不寫, 預設"GET",可以指定"POST",必須大寫 )


   conn.setRequestMethod("GET");


   //連線(可以不寫)
   conn.connect();


4, 獲取響應(如果返回的是200 , 那麼連線是成功的)
 
  if(conn.getResponseCode() == 200)
  {
InputStream is = conn.getInputStream();
.........
  }




POST方式 步驟:


1, 得到URL物件  

  URL url = new URL(路徑);


2, 開啟連線


  HttpUrlConnection conn = (HttpUrlConnection)url.openConnection();


3, 設定提交方式


  conn.setRequestMethod("POST");


4, 設定是否可以向伺服器寫出資料, 預設為false


  conn.setDoOutput(true);


          conn.setDoInput(true);//設定是否可以向伺服器獲取資料, 預設為true


       5,  獲取向伺服器寫出資料的流 , 並且寫入引數


   OutputStream  os = conn.getOutputStream();
   os.write("引數1鍵=引數1值&引數2鍵=引數2值".getBytes());
   os.flush();


6,  獲取響應資訊


   if(conn.getResponseCode == 200 )
   {
InputStream is = conn.getInputStream();


.......
   }




例項:  


例項一: 通過GET方式向伺服器提交資料,並且獲取響應的內容


例項二:  網路獲取圖片,存入本地磁碟中(GET)


例項三:  通過Post提交資料,並且獲取響應的內容



二,OkHttp (Android 6.0後推薦使用)

package okhttp;

import java.io.IOException;

import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

/**
 * 通過post 提交
 * @author Administrator
 *
 */
public class DemoOkhttp03 {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		
		//1, 導包
		
		//2, 的到客戶端
		OkHttpClient client = new OkHttpClient();
		
		//3, 發起新的請求,獲取返回資訊
		RequestBody body = new FormBody.Builder()
							.add("useName", "abc")//新增鍵值對
							.add("usePwd", "321")
							.build();
		
		Request request = new Request.Builder()
							.url("http://localhost:8080/Day_28_Servlet/LoginServlet")
							.post(body)
							.build();
		
		Response response = client.newCall(request).execute();
		
		if(response.isSuccessful())
		{
			String str = response.body().string();
			
			System.out.println("伺服器響應為: " + str);
		}
	}

}

package conn;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

/**
 * 用post方式提交資料給Servlet , 並獲取響應
 */

public class DemoConnection03 {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		
		String path = "http://localhost:8080/Day_28_Servlet/LoginServlet";
		
		//1, 得到URL物件
		URL url = new URL(path);
		
		//2, 開啟連線
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		
		//3, 設定提交型別
		conn.setRequestMethod("POST");
		
		//4, 設定允許寫出資料,預設是不允許 false
		conn.setDoOutput(true);
		conn.setDoInput(true);//當前的連線可以從伺服器讀取內容, 預設是true
		
		//5, 獲取向伺服器寫出資料的流
		OutputStream os = conn.getOutputStream();
		//引數是鍵值隊  , 不以"?"開始
		os.write("useName=abc&usePwd=123".getBytes());
		os.flush();
		
		//6, 獲取響應的資料
		if(conn.getResponseCode()==200)
		{
			//得到伺服器寫回的響應資料
			InputStream is = conn.getInputStream();
			
			//是Servlet中通過PrintWrite pw = response.getWrite();
			//pw.println(....);
			//pw.close();
			
			
			BufferedReader br = new BufferedReader(new InputStreamReader(is));
			
			String str = br.readLine();
			
			System.out.println("響應內容為:  " + str);
			
		}
		
		
		
	
	
	}

}