-
2021-03-10 06:13:51
1.maven引入依赖
org.apache.httpcomponents
httpclient
4.0.2
2.请求示例
package utils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* http工具类
*/
public class HttpUtils {
public static String doPost(String url, Map paramsMap) {
HttpClient httpClient = new DefaultHttpClient();
HttpPost postRequest = new HttpPost();
List params = new ArrayList<>();
Set paramsNames = paramsMap.keySet();
for (String paramsName : paramsNames) {
NameValuePair param = new BasicNameValuePair(paramsName, String.valueOf(paramsMap.get(paramsName)));
params.add(param);
}
try {
HttpEntity httpEntity = new UrlEncodedFormEntity(params, "UTF-8");
postRequest.setURI(new URI(url));
postRequest.setEntity(httpEntity);
HttpResponse response = httpClient.execute(postRequest);
if (response.getStatusLine().getStatusCode() == 200) {
HttpEntity resEntity = response.getEntity();
return EntityUtils.toString(resEntity, "utf-8");
} else {
HttpEntity resEntity = response.getEntity();
String message = EntityUtils.toString(resEntity, "utf-8");
System.out.println(message);
}
} catch (URISyntaxException | IOException e) {
System.out.println("请求异常");
e.printStackTrace();
}
return null;
}
}
UrlEncodedFormEntity用来设置请求的参数,参数类型为 List
BasicNameValuePair类的内部实现非常简单,并不是使用的map存储,而是直接在类中声明了两个属性,一个name,一个value
更多相关内容 -
HTTP请求行、请求头、请求体详解
2022-01-16 20:01:44Request Body:请求体 HTTP请求报文由3部分组成(请求行+请求头+请求体): 下面是一个实际的请求报文: ①是请求方法,HTTP/1.1 定义的请求方法有8种:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE,最常的...HTTP请求报文解剖
HTTP Request :HTTP请求
Request Line:请求行
Header:请求头
Request Body:请求体HTTP请求报文由3部分组成(请求行+请求头+请求体):
下面是一个实际的请求报文:
①是请求方法,HTTP/1.1 定义的请求方法有8种:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE,最常的两种GET和POST,如果是RESTful接口的话一般会用到GET、POST、DELETE、PUT。
②为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL
③是协议名称及版本号。
④是HTTP的报文头,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息。
⑤是报文体,它将一个页面表单中的组件值通过param1=value1¶m2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1¶m2=value2”的方式传递请求参数。HTTP响应报文解剖
HTTP的响应报文也由三部分组成(响应行+响应头+响应体):以下是一个实际的HTTP响应报文:
①报文协议及版本;
②状态码及状态描述;
③响应报文头,也是由多个属性组成;
④响应报文体,即我们真正要的“干货”。
响应状态码
和请求报文相比,响应报文多了一个“响应状态码”,它以“清晰明确”的语言告诉客户端本次请求的处理结果。
HTTP的响应状态码由5段组成:1xx 消息,一般是告诉客户端,请求已经收到了,正在处理,别急…
2xx 处理成功,一般表示:请求收悉、我明白你要的、请求已受理、已经处理完成等信息.
3xx 重定向到其它地方。它让客户端再发起一个请求以完成整个处理。
4xx 处理发生错误,责任在客户端,如客户端的请求一个不存在的资源,客户端未被授权,禁止访问等。
5xx 处理发生错误,责任在服务端,如服务端抛出异常,路由出错,HTTP版本不支持等。
200 OK
你最希望看到的,即处理成功! -
理解Post请求和Get请求区别&&请求头请求体简单回顾
2022-03-03 14:53:47Get请求是把参数放在URL中(无请求体),会将数据暴露在请求地址上,而Post请求是通过请求体requestBody来传递参数的 Get和Post是HTTP协议中的两种发送请求方法 那么HTTP又是什么呢? HTTP是基于TCP/IP中关于...最直观的区别:
Get请求是把参数放在URL中(无请求体),会将数据暴露在请求地址上,而Post请求是通过请求体requestBody来传递参数的
Get和Post是HTTP协议中的两种发送请求方法
那么HTTP又是什么呢?
HTTP是基于TCP/IP中关于数据如何在万维网中如何通信的协议;
所以说Get与Post能做的事情都是一样的,底层就是TCP/IP
要区分Get与Post还需要从它们的底层开始
TCP就像汽车一样,可以用来传输数据,但是路上都是一样的汽车就会混乱,比如说救护车和货车,救护车被装货的车堵到后面肯定得急死,所以说:我们要区分这些车——>Http就诞生了,他就相当于交通规则,里面有好几个等级,分为:GET,POST,PUT,DELETE..;
GET与POST还一个重要的区别
对于GET:浏览器会将http的header与data一并发出去,服务器直接响应200(并返回数据);
对于POST:浏览器先发送Header,当服务器响应了100之后,浏览器再发送data,最后服务器才响应200(返回数据)——>所以说它分了两步
请求体与请求体简单理解
请求头header:一般用来存放一些cookie,token信息;
请求体Requestbody:一般用来存储post的参数和参数数据;
Referer :表示这个请求是从哪个URL过来的,假如你通过google搜索出一个商家的广告页面,你对这个广告页面感兴趣,鼠标一点发送一个请求报文到商家的网站,这个请求报文的Referer报文头属性值就是http://www.google.com;
Accept :请求报文可通过一个“Accept”报文头属性告诉服务端 客户端接受什么类型的响应
例子:如下报文头相当于告诉服务端,俺客户端能够接受的响应类型仅为纯文本数据啊,你丫别发其它什么图片啊,视频啊过来,那样我会歇菜的~~~:
Accept属性的值可以为一个或多个MIME类型的值;
什么是Mime
场景:在JSP中contentType属性用于指定JSP页面响应的MIME类型
使用MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准,使用MIME类型可以设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开;
在JSP页面中,contentType属性设置为:contentType=“text/html;charset=GBK”;
未完待续
-
请求行、请求头、请求体解析
2021-04-14 17:23:47一个完整的HTTP请求包括:请求行、请求头、请求体 这里面最常用到的就是状态码,很多时候都是通过状态码来判断,如(列举几个最常见的): 200–表明请求被成功的完成,所请求的资源发送回客户端 304–自从上次请i...一个完整的HTTP请求包括:请求行、请求头、请求体
这里面最常用到的就是状态码,很多时候都是通过状态码来判断,如(列举几个最常见的):
200–表明请求被成功的完成,所请求的资源发送回客户端 304–自从上次请i去后,请求的网页没有修改,请客户端使用本地缓存
400–客户端请求有错误(可能是安全等模块拦截了) 401–请求未经授权 403–禁止访问(比如未登录时的禁止访问)
404–资源找不到 500–服务器内部错误 503–服务不可用再列举一下大致范围内状态码的意义
1xx——指示信息,表示请求已接收,继续处理 2xx——成功,表示请求已被成功接收、理解、接受
3xx——重定向,要完成请求必须进行更进一步的 操作 4xx——客户端错误,请求有语法错误或请求无法实现
5xx——服务器端错误,服务器未能实现合法的请求常用的请求头部(部分):
Accept: 接收类型,表示浏览器支持的MIME类型 (对标服务端返回的Content-Type)
Accept-Encoding:浏览器支持的压缩类型,如gzip等,超出类型不能接收
Content-Type:客户端发送出去实体内容的类型
Cache-Control: 指定请求和响应遵循的缓存机制,如no-cache
If-Modified-Since:对应服务端的Last-Modified,用来匹配看文件是否变动,只能精确到1s之内,http1.0中
Expires:缓存控制,在这个时间内不会请求,直接使用缓存,http1.0,而且是服务端时间
Max-age:代表资源在本地缓存多少秒,有效时间内不会请求,而是使用缓存,http1.1中
If-None-Match:对应服务端的ETag,用来匹配文件内容是否改变(非常精确),http1.1中
Cookie: 有cookie并且同域访问时会自动带上
Connection: 当浏览器与服务器通信时对于长连接如何进行处理,如keep-alive
Host:请求的服务器URL
Origin:最初的请求是从哪里发起的(只会精确到端口),Origin比Referer更尊重隐私
Referer:该页面的来源URL(适用于所有类型的请求,会精确到详细页面地址,csrf拦截常用到这个字段)
User-Agent:用户客户端的一些必要信息,如UA头部等常用的响应头部(部分):
Access-Control-Allow-Headers: 服务器端允许的请求Headers
Access-Control-Allow-Methods: 服务器端允许的请求方法
Access-Control-Allow-Origin: 服务器端允许的请求Origin头部(譬如为*)
Content-Type:服务端返回的实体内容的类型
Date:数据从服务器发送的时间
Cache-Control:告诉浏览器或其他客户,什么环境可以安全的缓存文档
Last-Modified:请求资源的最后修改时间
Expires:应该在什么时候认为文档已经过期,从而不再缓存它
Max-age:客户端的本地资源应该缓存多少秒,开启了Cache-Control后有效
ETag:请求变量的实体标签的当前值
Set-Cookie:设置和页面关联的cookie,服务器通过这个头部把cookie传给客户端
Keep-Alive:如果客户端有keep-alive,服务端也会有响应(如timeout=38)
Server:服务器的一些相关信息如下图是对某请求的http报文结构的简要分析:
Request Method: GET, POST, PUT,DELETE, OPTIONS, HEAD
接下来就是其他报文头,常见的请求报头有: Accept, Accept-Charset, Accept-Encoding, Accept-Language, Content-Type, Authorization, Cookie, User-Agent等。 -
关于post的请求体类型
2021-04-06 21:47:32文章目录Http请求一、body的类型二、使用步骤1.引入库2.读入数据总结 ...header显而易见是请求头 ...body是指请求体中的数据 前端发送请求最常用的是get请求还有post请求 get请求只能传query参数,query参数 -
RestTemplate 使用:设置请求头、请求体
2022-03-29 20:51:59本文简单介绍了如何在使用 RestTemplate 时设置请求头以及请求体,并提供了 Demo。 -
http请求头header、请求体body、请求行介绍
2021-03-15 00:25:20HttpServletRequest对象代表客户端的请求,当客户端通过http协议请求访问服务器的时候,...request如果是post才有请求体,get则没有请求体,直接跟在?后面,用&隔开。getHeader(String name)获取单个请求头name... -
http get 请求可以有请求体吗
2021-11-18 22:02:56http get 请求可以有请求体吗 可以 rfc 规范并没有规定 get 请求不可以有请求体 不过习惯上, get 请求都认为是对请求 uri 的数据传输, 并且有的网络库不支持 get 传输请求体, 例如 okhttp -
http请求的四部分(请求行,请求头,空行,请求体)
2022-05-20 11:35:49抓包工具抓取数据 第一部分 :请求行 第二部分:请求头 第三部分:空行 第四部分:请求体(body) -
nginx请求体读取
2020-12-22 13:03:03上节说到nginx核心本身不会主动读取请求体,这个工作是交给请求处理阶段的模块来做,但是nginx核心提供了ngx_http_read_client_request_body()接口来读取请求体,另外还提供了一个丢弃请求体的接口-ngx_... -
GET请求也有请求体
2020-12-16 19:51:41get请求也是可以带请求体的,可以被servlet中的request.getInputStream()获取。 在Fiddle4中可以看到这条请求,是带有请求体的 # 请求内容raw GET http://localhost:8080/user/login.do HTTP/1.1 User-Agent: ... -
Nginx处理请求体那点事
2022-05-04 10:33:58proxy_request_buffering # 如果开启了 nginx会在内存开辟一块空间来缓存客户发来的请求 语法:proxy_request_buffering on | off 默认值:proxy_request_buffering on 上下文:http、server、location ... -
开发者工具查看请求头&&请求体&&响应头&&响应体信息
2022-04-11 21:26:53(2)请求方法为POST,参数存储在请求体上,可以认为传送的数据大小不限。 二、查看响应信息 (1)响应头信息 (2)响应体信息 注:Response里展示的信息为服务器返回的原始信息;Preview里展示的是经浏览器格式化... -
nginx 因POST请求体过大导致500错误问题排查记录
2022-03-02 15:45:03今天同事遇到一个问题同一个保存接口操作,第一个可以保存成功(请求体很小),第二个提示“500 Internal Server Error”(请求体比较大)。 二. 初步排查 刚开始以为是接口本身的问题,如是去接口所在服务器查看日志... -
HTTP请求消息数据格式详解(请求头,请求行,请求体)
2020-07-14 23:08:18概念:Hyper Text Transfer Protocol 超文本传输协议 传输协议:定义了,客户端和服务器端通信时,发送数据的格式 特点: 基于TCP/IP的高级协议 ...请求方式 请求url 请求协议/版本 GET /logi -
SpringBoot中获取请求头,请求体,路径中的值
2022-02-11 22:31:09获取请求头中的值: 获取请求头中的Accept @GetMapping("/getHead") @ResponseBody public void getHead(@...获取请求体中的值: @RequestMapping(value = "/test",method = RequestMethod.POST) public Per -
谷歌浏览器查看http请求,请求头请求体响应数据和状态
2022-01-17 17:27:30谷歌浏览器查看http请求,请求头请求体响应数据和状态 -
request 获取请求体数据
2021-03-28 00:03:55request 获取请求体数据 doGet, 如果servlet 支持 HTTP GET 请求 doPost, 针对 HTTP POST 请求 **步骤1:在web目录下新建一个regist.html <!DOCTYPE html> <html lang="en"> <head> <meta ... -
HTTP GET请求使用了请求体遇到的坑
2021-01-28 16:45:18响应内容: 以及此时后端显示的错误: 结论就是: HTTP协议本身支持GET请求携带请求体 JAVA后端支持GET请求携带请求体 WEB浏览器不支持GET请求携带请求体 解决方案一:就是将GET请求改成POST请求 解决方案二:GET... -
通俗易懂。HTTP请求行、请求头、请求体、响应行、响应头、响应体详解
2021-11-04 10:34:11Request Body:请求体 HTTP请求报文由3部分组成(请求行+请求头+请求体): 下面是一个实际的请求报文: 其中,①,②和③属于请求行;④属于请求头;⑤属于报文体 ① 是请求方法,HTTP/1.1 定义的请求方法有8种:... -
Request获取请求体
2020-05-28 16:18:29获取请求体数据: 请求体:只有POST请求方式,才请求体,在请求体中封装了POST请求的请求参数; 步骤: 获取流对象 BufferedReader getReader() :获取字符输入流,只能操作字符数据 Servlet Inputstream get ... -
HTTP常用请求头与请求体实例
2020-07-16 16:58:12HTTP概要 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是... ... ... ...HTTP请求与响应 ...1.get无参请求与响应: ...get无参请求(cookie有删减): GET / HTTP/1.1 Host: www.baidu.com Connection: keep-alive. -
【servlet】Request获取请求体数据的常用方法
2021-12-23 15:14:16Request获取请求体数据的常用方法 import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; ... -
从HttpServletRequest获取POST请求体
2021-06-02 14:17:15getInputStream()、getReader() 上面两种方法获取的是Http请求包的包体,因为GET方式请求一般不包含包体.所以上面两种方法一般用于POST请求获取参数. -
软件测试(测试开发之后端接口开发3——请求体)
2022-03-04 05:01:01没错,就用请求体发送。 老规矩,先上代码 这里我们介绍下,我们新引入了一个pydantic库。 pydantic —— 使用Python类型提示来进行数据验证和设置管理的库。 从上图从,我们先创建了一个数据模型Student,... -
获取请求行,请求头,请求体的方法
2020-06-28 20:54:351.通过request获取请求行 获取客户端的请求方式:String getMethod(); 获取请求资源: String getRequestURI()------获取所有资源地址 StringBuffer getRequestRUL()----获取网络资源地址 STring ...