網絡基礎之HTTP

HTTP協議:
  1. 應用層協議
  2. 默認端口號:80
  3. 請求-應答模式
  4. 特點:簡單快速,靈活,靈活,無連接,一次請求只能獲取一個資源,無狀態,HTTP沒有記憶功能,明文傳輸,HTTPS對網絡傳輸數據進行加密
  5. GET:請求獲取Request-URT所標識的資源
  6. Post:在REquest-URI所標識的資源後附加新的數據,向服務器傳送資源
HTTP-請求
  1. 組成
    1. head(必須)【必須的信息儲存位置】
    2. body(get請求無)
    3. Request Method :請求方法
    4. staus code :請求狀態
    5. Remote Address:遠程地址
    6. accept:接受文件類型
    7. connection:保持連接,暫時不進行四次揮手
    8. Cache-control:緩存

HTTP-響應
  1. head
  2. body
HTTP-Cookie和Session
  1. Cookie保存在客服端
  2. Session保存在服務器中
  3. Session文件創建時間是第一個登錄服務器
  4. Cookie是字符串,用於服務器的身份代碼
HTTP協議
  1. 請求和響應成對出現
  2. HTTP請求是給服務器的
    1. 第一行:請求行:請求方式 資源地址 協議版本
    2. 第二行~:請求頭,請求頭的鍵值對格式,格式:key value
      1. If-modified-since ,上次修改時間
    3. 空行之後,請求體,post提交方式的參數
  3. HTTP響應
    1. 第一行:響應行:協議版本 響應狀態碼 狀態描述信息
      1. 常見狀態碼:200 :一切正常 302 :重定向 304:拿本地緩存 404:未尋找到資源 500服務器端錯誤
      2. 響應頭
        1. 關注:last-modified:訪問資源最後修改時間
      3. 響應體:頁面顯示的正文
HTTP1.1和1.0的差別:1.0獲取資源後斷開,1.1獲取資源後不斷開

模擬客服端發送get請求:

package cn.woniu.http;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
/**
 * 模擬發送get請求
 * 1、獲取URL
 * 2、獲取對應URL的連接對應的方法
 * 3、設置相應的方法及對應的參數,
 * 4、建立連接
 * 5、獲取連接服務器響應數據
 * 6、讀取相應數據並方法相應的文件
 * 7、異常處理
 * 8、關閉資源
 * @author Administrator
 *
 */
public class Get {
	public static void main(String[] args) {
		/*準備模擬get請求的服務器的地址*/
		String urlStr = "http://192.168.10.108/Agileone_1.2/";
		BufferedInputStream input = null;
		BufferedOutputStream output = null;
		HttpURLConnection con = null;
		try {
			URL url = new URL(urlStr);
			// 獲取一個HTTP連接對象
			URLConnection urlcon = url.openConnection();
			con = (HttpURLConnection) urlcon;
			/* 設置請求參數及 */
			con.setRequestMethod("get");
			// con.setRequestProperty("Accept", "");
			// 建立連接
			con.connect();
			/* 獲取服務器響應數據 */
			input = new BufferedInputStream(con.getInputStream());
			/* 設置輸出流,將讀取輸入放入文件 */
			output = new BufferedOutputStream(new FileOutputStream(
					new File("C:\\Users\\Administrator\\Desktop\\11.txt"), true));
			// 讀取數據
			byte[] b = new byte[1024];
			int len = 0;
			/* 每次讀取文件確保文件讀取完 */
			while ((len = input.read(b)) != -1) {
				output.write(b);
			}
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			/* 關閉資源 */
			try {
				output.flush();
				output.close();
				con.disconnect();
				input.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

模擬發送post請求:

package cn.woniu.http;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
/**
 * 模擬發送post請求
 * @author Administrator
 *
 */
public class Post {
	public static void main(String[] args) {
		String urlString = "http://192.168.10.108/Agileone_1.2/index.php/common/login";
		HttpURLConnection con = null;
		OutputStream os = null;
		InputStream is = null;
		try {

			URL url = new URL(urlString);
			/* 獲取http連接 */
			con = (HttpURLConnection) url.openConnection();
			/*設置請求的方法,默認get方法及參數*/
			con.setRequestMethod("POST");
			/*設置Cookie值*/
			con.setRequestProperty("Cookie",
					"PHPSESSID=53342f3ff0fd279d897278aa907114ff");
			/*開啓output流,默認關閉*/
			con.setDoOutput(true);
			/*與服務器建立連接*/
			con.connect();
			/*獲取輸出流,想服務器輸出內容*/
			os = con.getOutputStream();
			/*post方法的方法體內容,鍵值對形式傳輸內容*/
			String requestContent = "username=admin&password=admin&savelogin=true";
			/*發送內容*/
			os.write(requestContent.getBytes());
			is = con.getInputStream();
			/*讀取服務器響應內容*/
			byte[] bs = new byte[1024];
			int len = 0;
			while ((len = is.read(bs)) != -1) {
				/*打印輸入內容*/
				System.out.println(new String(bs, 0, len, "utf-8"));
			}
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				is.close();
				os.close();
				con.connect();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}


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