HTTP协议:
- 应用层协议
- 默认端口号:80
- 请求-应答模式
- 特点:简单快速,灵活,灵活,无连接,一次请求只能获取一个资源,无状态,HTTP没有记忆功能,明文传输,HTTPS对网络传输数据进行加密
- GET:请求获取Request-URT所标识的资源
- Post:在REquest-URI所标识的资源后附加新的数据,向服务器传送资源
HTTP-请求
- 组成
- head(必须)【必须的信息储存位置】
- body(get请求无)
- Request Method :请求方法
- staus code :请求状态
- Remote Address:远程地址
- accept:接受文件类型
- connection:保持连接,暂时不进行四次挥手
- Cache-control:缓存
HTTP-响应
- head
- body
HTTP-Cookie和Session
- Cookie保存在客服端
- Session保存在服务器中
- Session文件创建时间是第一个登录服务器
- Cookie是字符串,用于服务器的身份代码
HTTP协议
- 请求和响应成对出现
- HTTP请求是给服务器的
- 第一行:请求行:请求方式 资源地址 协议版本
- 第二行~:请求头,请求头的键值对格式,格式:key value
- If-modified-since ,上次修改时间
- 空行之后,请求体,post提交方式的参数
- HTTP响应
- 第一行:响应行:协议版本 响应状态码 状态描述信息
- 常见状态码:200 :一切正常 302 :重定向 304:拿本地缓存 404:未寻找到资源 500服务器端错误
- 响应头
- 关注:last-modified:访问资源最后修改时间
- 响应体:页面显示的正文
- 第一行:响应行:协议版本 响应状态码 状态描述信息
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();
}
}
}
}