Http请求协议原理和java发送post请求代码

Http协议

Hyper Text Transfer Protocol 超文本传输协议

http协议即按照一定规则,向服务器要数据,或发送数据,而服务器按一定规则,回应数据。

HTTP请求信息和响应信息的格式

请求

  • 请求行: 客户端浏览器告诉服务器的信息

    请求方法 请求路径url 所用协议

  • 请求头信息(格式:key :value)

    1. User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息(兼容性问题)

    2. 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请求的区别:

区别GETPOST
请求参数位置请求参数在请求行中,在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;   
	}
}
``





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值