java http head 请求_http请求头header、请求体body、请求行介绍

HttpServletRequest对象代表客户端的请求,当客户端通过http协议请求访问

服务器的时候,http请求头的所有信息都封装在这个对象中,通过这个对象,可以获取客户端请求的所有信息。http请求包含请求行/状态行、请求头、请求体。

request如果是post才有请求体,get则没有请求体,直接跟在?后面,用&隔开。

getHeader(String name)获取单个请求头name对应的value

getHeaders(String name)获取多个请求头对应的一组value,因此返回的是枚举类型的数据

getHeaderNames()获取请求头的所有name值,返回的数据也是一个枚举类型数据,将枚举中的元素遍历出来,根据name取到value,即是请求头的所有信息。

请求头header一般用来存放一些cookie,token信息;

请求体body一般用来存储post的参数和参数数据;

我们用postman测试下

Params

school:XiaMen

Header

userName:chen

body

{"class":"test"}

d66b9fcd1d340de0cec6f92f3fd51948.png

3d08100c386d090f035afec1589c1b5a.png

package com.example.demo;

import java.io.BufferedReader;

import java.text.MessageFormat;

import java.util.Enumeration;

import java.util.Iterator;

import java.util.Map;

import java.util.Map.Entry;

import java.util.Set;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class IndexController {

@RequestMapping("/hello")

public String hello(HttpServletRequest request,HttpServletResponse response){

/**

* HttpServletRequest对象代表客户端的请求,当客户端通过http协议请求访问

* 服务器的时候,http请求头的所有信息都封装在这个对象中,通过这个对象,可以获取

* 客户端请求的所有信息.

* http请求包含请求行/状态行、请求头、请求体

*/

//客户端请求uri

String uri = request.getRequestURI();

//客户端请求行中的参数部分

String queryString = request.getQueryString();

//返回url的额外路径信息

String pathInfo = request.getPathInfo();

//客户端ip

String ip = request.getRemoteAddr();

//客户端完整主机名

String host = request.getRemoteHost();

//客户端端口

int port = request.getRemotePort();

//获取web服务器的主机和端口,主机名

String webHost = request.getLocalAddr();

int webPort = request.getLocalPort();

String webName = request.getLocalName();

//获取请求头信息

Enumerationheaders = request.getHeaderNames();

System.out.println("请求头信息");

while(headers.hasMoreElements()){

String headName = (String)headers.nextElement();

String headValue = request.getHeader(headName);

System.out.println(headName+":"+headValue);

}

System.out.println("请求参数");

//request如果是post才有请求体,get则没有请求体,直接跟在?后面,用&隔开

/**

* getHeader(String name)获取单个请求头name对应的value

* getHeaders(String name)获取多个请求头对应的一组value,因此返回的是枚举类型的数据

* getHeaderNames()获取请求头的所有name值,返回的数据也是一个枚举类型数据,将枚举中的元素遍历出来,根据name取到value,即是请求头的所有信息

*/

//获取客户端请求参数

//request对象封装的参数是以Map的形式存储的

MapparamMap = request.getParameterMap();

for(Map.Entryentry :paramMap.entrySet()){

String paramName = entry.getKey();

String paramValue = "";

String[] paramValueArr = entry.getValue();

for (int i = 0; paramValueArr!=null && i < paramValueArr.length; i++) {

if (i == paramValueArr.length-1) {

paramValue+=paramValueArr[i];

}else {

paramValue+=paramValueArr[i]+",";

}

}

System.out.println(MessageFormat.format("{0}={1}", paramName,paramValue));

}

//请求体

try {

System.out.println("请求体");

charReader(request);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return "hello world";

}

void charReader(HttpServletRequest request) throws Exception{

BufferedReader br = request.getReader();

String str, wholeStr = "";

while((str = br.readLine()) != null){

wholeStr += str;

}

System.out.println(wholeStr);

}

}

输出结果

==============================================

请求头信息

username:chen

cache-control:no-cache

postman-token:58cf0ebc-5448-4460-95db-8610bec65927

content-type:text/plain

user-agent:PostmanRuntime/7.4.0

accept:*/*

host:localhost:8080

accept-encoding:gzip, deflate

content-length:16

connection:keep-alive

请求参数

school=XiaMen

请求体

{"class":"test"}

往请求头header里设置参数和参数value,可以使用HttpClient访问rest接口,往请求头里添加token验证信息

CloseableHttpClient client = HttpClients.createDefault();

HttpGet get = new HttpGet("http://localhost:8080/index");

try {

get.setHeader("token", "jdlj939399lKDN");

CloseableHttpResponse response2 = client.execute(get);

HttpEntity entity = response2.getEntity();

} catch (ClientProtocolException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进课程实践、课外项目或毕业设计。通过分析和运源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值