介绍
HttpServletRequest对象:主要作用是用来接收客户端发送过来的请求信息,例如:请求的参数,发送的头信息都属于客户端发送过来的信息,service()方法中形参接收的是HttpServletRequest接口的实例化对象,表示该对象主要应用在HTTP协议上,该对象是由Tomcat封装好传递过来的。
HttpServletRequest是ServletRequest的子接口,ServletRequest只有一个子接口,就是HttpServletRequest。既然只有一个子接口为什么不将两个接口合并为一个呢?
从长远上讲,现在主要用的协议是HTTP协议,但以后可能会出现更多新的协议。若以后想要支持这种新协议,只需要直接继承ServletRequest接口就好了。
在HttpServletRequest接口中,定义的方法很多,但都是围绕接收客户端参数的。但是怎么拿到该对象呢?不需要,直接在Service()方法中由容器传入过来,而我们需要做的就是取出对象中的数据,进行分析、处理。
常用方法 (原文链接:https://blog.csdn.net/Mr_Bumble/article/details/112446072)
getRequestURL() 获取客户端发出请求时的完整URL。
getRequestURI() 获取请求行中的资源名称部分(项目名称开始)
getQueryString() 获取请求行中的参数部分
getMethod() 获取客户端请求方式
getProtocol() 获取HTTP版本号
getContextPath() 获取webapp名字
getParameter(“参数名”)。返回的是一个字符串 获取某个请求地址中参数的值
//获取客户端请求的完整URL(从http开始,到?前面结束)
String url = req.getRequestURL().toString();
System.out.println("获取客户端请求的完整URL "+url);
//获取客户端请求的部分URL (从站点名开始,到?前面结束)
String uri = req.getRequestURI();
System.out.println("获取客户端请求的部分URL "+ uri);
//获取请求行中的参数部分
String queryString = req.getQueryString();
System.out.println("获取请求行中的参数部分 "+queryString);
//获取客户端的请求方式
String method = req.getMethod();
System.out.println("获取客户端的请求方式 "+method);
//获取HTTP版本号
String protocol = req.getProtocol();
System.out.println("获取HTTP版本号 "+protocol);
//获取webapp名字(站点名)
json模块
data = {"name":"musen","id":18,"msg":None}
json_data = '{"name":"musen","id":18,"msg":null}'
# 正确操作
import json
# 将json字符串转为python类型,会自动将null转为None
res = json.loads(json_data) # {"name":"musen","id":18,"msg":None}-->json
# 将python类型转为json字符串,
res = json.dumps(json) # {"name":"musen","id":18,"msg":null} -->str
#错误操作1. 不能使用dict将json字符串转成字典
# res = dict(json_data)
#错误操作2. 不能使用过eval将json字符串转为字典,json中的null在python中无法识别,会当成变量
# res = eval(json_data
获取响应数据
-
res.text:自动识别文本中的编码格式进行解码,有时候不准确,出现乱码( html,xml,json均可 ),获取的是字符串类型
-
res.content.decode("utf8"):需要指定解码方式,获取的是字符串类型
-
res.json():获取返回内容中的json数据(只能在返回数据是json的情况下使用),可以将json字符串转成对应的python类型的数据
-
res.headers : 响应头
-
res.status_code : 响应码
(4)获取cookies: 类字典形式
-
例如: <Cookies JSESSIONID = 22222222222222> 取JSESSIONID :res.cookies['JSESSIONID']
(5)获取请求头: res.request.headers
(6)请求需要登录才能访问的接口
-
http请求时无状态的,不会记录上次的请求数据
-
使用requests发送请求,不会记录上次请求的cookie信息,需要使用session对象来发送请求
(7)session对象发送请求
-
session对象可以自动传递cookie信息(下一次请求会自动携带上次请求的cookie)