- 應用層協議
- 默認端口號:80
- 請求-應答模式
- 特點:簡單快速,靈活,靈活,無連接,一次請求只能獲取一個資源,無狀態,HTTP沒有記憶功能,明文傳輸,HTTPS對網絡傳輸數據進行加密
- GET:請求獲取Request-URT所標識的資源
- Post:在REquest-URI所標識的資源後附加新的數據,向服務器傳送資源
- 組成
- head(必須)【必須的信息儲存位置】
- body(get請求無)
- Request Method :請求方法
- staus code :請求狀態
- Remote Address:遠程地址
- accept:接受文件類型
- connection:保持連接,暫時不進行四次揮手
- Cache-control:緩存
- head
- body
- Cookie保存在客服端
- Session保存在服務器中
- Session文件創建時間是第一個登錄服務器
- Cookie是字符串,用於服務器的身份代碼
- 請求和響應成對出現
- HTTP請求是給服務器的
- 第一行:請求行:請求方式 資源地址 協議版本
- 第二行~:請求頭,請求頭的鍵值對格式,格式:key value
- If-modified-since ,上次修改時間
- 空行之後,請求體,post提交方式的參數
- HTTP響應
- 第一行:響應行:協議版本 響應狀態碼 狀態描述信息
- 常見狀態碼:200 :一切正常 302 :重定向 304:拿本地緩存 404:未尋找到資源 500服務器端錯誤
- 響應頭
- 關注:last-modified:訪問資源最後修改時間
- 響應體:頁面顯示的正文
- 第一行:響應行:協議版本 響應狀態碼 狀態描述信息
模擬客服端發送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();
}
}
}
}