Http协议
Hyper Text Transfer Protocol 超文本传输协议
http协议即按照一定规则,向服务器要数据,或发送数据,而服务器按一定规则,回应数据。
HTTP请求信息和响应信息的格式
请求:
请求行: 客户端浏览器告诉服务器的信息
请求方法 请求路径url 所用协议
请求头信息(格式:key :value)
User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息(兼容性问题)
Referer:http://localhost/login.html(告诉服务器,我(当前请求)从哪里来),
作用:1.防盗链 2.统计工作
请求空行:用于分割请求头和请求体
请求主体信息:POST中封装POST请求消息的的请求参数 GET没有
POST /0606/02.php HTTP/1.1
Host:localhost
Content-type:application/x-www-form-urlencode
Content-length:5
Age=3
响应
响应行(协议 状态码 状态文字)
响应头信息(格式:key : value)
空行
主体信息(也可以没有)
HTTP/1.1 200 OK
Content-type: text/html
Content-length:5
hello
请求方法有那些?
GET HEAD POST PUT DELETE TRACE OPTIONS
GET和POST请求的区别:
区别 | GET | POST |
---|---|---|
请求参数位置 | 请求参数在请求行中,在url后 | 请求参数在请求体中 |
长度 | 请求的url有长度限制 | 请求的url长度没有限制 |
安全 | 相对不安全 | 相对安全 |
注意:这些请求方法虽然HTTP协议里规定了,但是web SERVER未必允许或支持这些方法。
HEAD:和GET基本一致,HEAD只返回内容的状态,get返回整个内容
OPTIONS:返回请求地址所支持的请求方法类型。
HTTP响应中的状态码
状态码 | 定义 | 说明 |
---|---|---|
1XX | 信息 | 接收到请求,继续处理 |
2XX | 成功 | 操作成功地收到,理解和接收 |
3XX | 重定向 | 为了完成请求,必须采取进一步措施 |
4XX | 客户端错误 | 请求的语法有错误或不能完全被满足 |
5XX | 服务端错误 | 服务器无法完成明显有效的请求 |
200 - 服务器成功返回网页
301/2 - 永久/临时重定向
304 NOT Modified - 未修改 取缓存数据
307 - 重定向中保存原有的请求数据
404 - 请求的网页不存在
503 - 服务器暂时不可用
500 - 服务器内部错误
Http post请求
import java.util.HashMap;
import com.smile.util.HttpOfJava;
public class PostSend_MAP {
public static void main(String[] args) {
String uri="http:\\baidu.com";
String charset="UTF-8";
//设置请求体
HashMap<String,Object> bodyMap=new HashMap<>();
bodyMap.put("xxxxxx","1");
//请求头设置
HashMap<String, String> headerMap = new HashMap<>();
headerMap.put("token","ASDF304IXK2WCQVBM21WN4F35OU6QV0");
headerMap.put("Content-Type","application/json");
headerMap.put("abc","1");
//调用
HttpOfJava.sendPost(uri,charset,bodyMap,headerMap);
}
}
package com.smile.util;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;
import com.alibaba.fastjson.JSON;
public class HttpOfJava {
/**
* 无参数post
* uri 地址
* charset 编码
* return 字符串
*/
public static String sendPost_non(String uri,String charset) {
String result=null;
InputStream in=null;
try {
URL url=new URL(uri);
HttpURLConnection urlcon=(HttpURLConnection) url.openConnection();
urlcon.setRequestMethod("POST");
urlcon.connect();//获取连接
in= urlcon.getInputStream();
BufferedReader buffer=new BufferedReader(new InputStreamReader(in,charset));
StringBuffer bs=new StringBuffer();
String line=null;
while((line=buffer.readLine())!=null) {
bs.append(line);
}
result=bs.toString();
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if (null != in){
in.close();
}
} catch (Exception e2) {
System.out.println("[关闭流异常][错误信息:" + e2.getMessage() + "]");
}
}
return result;
}
package com.smile.util;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;
import com.alibaba.fastjson.JSON;
public class HttpOfJava {
/**
* 无参数post
* uri 地址
* charset 编码
* return 字符串
*/
public static String sendPost_non(String uri,String charset) {
String result=null;
InputStream in=null;
try {
URL url=new URL(uri);
HttpURLConnection urlcon=(HttpURLConnection) url.openConnection();
urlcon.setRequestMethod("POST");
urlcon.connect();//获取连接
in= urlcon.getInputStream();
BufferedReader buffer=new BufferedReader(new InputStreamReader(in,charset));
StringBuffer bs=new StringBuffer();
String line=null;
while((line=buffer.readLine())!=null) {
bs.append(line);
}
result=bs.toString();
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if (null != in){
in.close();
}
} catch (Exception e2) {
System.out.println("[关闭流异常][错误信息:" + e2.getMessage() + "]");
}
}
return result;
}
/**
*
* @param uri url地址
* @param charset 设置字符串UTF-8
* @param bodyMap 主体消息
* @param headerMap 响应头设置
* @return 发返回值为String
*/
public static String sendPost(String uri,String charset,Map<String,Object> bodyMap,Map<String,String> headerMap) {
String result = null;
PrintWriter out = null;
InputStream in = null;
try {
URL url = new URL(uri);
HttpURLConnection urlcon = (HttpURLConnection) url.openConnection();
urlcon.setDoInput(true);
urlcon.setDoOutput(true);
urlcon.setUseCaches(false);
urlcon.setRequestMethod("POST");
if(!headerMap.isEmpty()) {
for(Map.Entry<String, String> entry: headerMap.entrySet()) {
urlcon.setRequestProperty(entry.getKey(), entry.getValue());
}
}
//获取连接
urlcon.connect();
out=new PrintWriter(urlcon.getOutputStream());
//请求体中内容转换为json,用输出流发送到目的地
out.print(JSON.toJSONString(bodyMap));
out.flush();
in=urlcon.getInputStream();
BufferedReader buffer = new BufferedReader(new InputStreamReader(in,charset));
StringBuffer bs=new StringBuffer();
String line=null;
while((line=buffer.readLine())!=null) {
bs.append(line);
}
result=bs.toString();
System.out.println(result);
} catch (Exception e) {
System.out.println("[请求异常][地址:" + uri + "][错误信息:"+ e.getMessage() + "]");
} finally {
try {
if (null != in){
in.close();
}
if (null != out){
out.close();
}
} catch (Exception e2) {
System.out.println("[关闭流异常][错误信息:" + e2.getMessage() + "]");
}
}
return result;
}
}
(null != in){
in.close();
}
if (null != out){
out.close();
}
} catch (Exception e2) {
System.out.println("[关闭流异常][错误信息:" + e2.getMessage() + "]");
}
}
return result;
}
}
``