-
2021-10-14 11:50:47
在对接第三方接口时,需要进行数据交互,于是写了一个 Java 的 Http 请求工具类,该工具类可以调用 Get 请求或者 POST 请求。
根据自己业务需求灵活修改
直接上代码:
package com.file.license.utils; import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URIBuilder; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import java.io.ByteArrayOutputStream; import java.io.Closeable; import java.io.IOException; import java.io.InputStream; import java.net.*; import java.util.Map; import java.util.Set; /** * @ClassName HttpUtils * @Description 请求工具 * @Author msx * @Date 2021-08-26 17:40 * @Version 1.0 */ public class HttpUtils { /** * @Description get请求,参数k-v形式 * @Author msx * @Date 2021-08-26 17:41 * @param url-[请求地址] headMap-[请求头参数] paramMap-[请求参数] * @return String 返回结果 */ public static String doGet(String url, Map<String, String> headMap, Map<String, String> paramMap) { System.out.println(" = = 请求地址 = = > > > > > > " + url); // 创建Httpclient对象 CloseableHttpClient httpClient = HttpClients.createDefault(); String result = ""; CloseableHttpResponse response = null; try { //创建uri URIBuilder builder = new URIBuilder(url); if (paramMap != null && !paramMap.isEmpty()) { Set<Map.Entry<String, String>> entrySet = paramMap.entrySet(); for (Map.Entry<String, String> entry : entrySet) { builder.addParameter(entry.getKey(), entry.getValue()); } } URI uri = builder.build(); // 创建http GET请求 HttpGet httpGet = new HttpGet(uri); //添加请求头 if (headMap != null && !headMap.isEmpty()) { Set<Map.Entry<String, String>> entries = headMap.entrySet(); System.out.println(" = = 请求头 = = > > > > > > "); for (Map.Entry<String, String> e : entries) { System.out.println(e.getKey() + ":" + e.getValue()); httpGet.addHeader(e.getKey(), e.getValue()); } } // 执行请求 response = httpClient.execute(httpGet); // 判断返回状态是否为200 /*if (response.getStatusLine().getStatusCode() == 200) { result = EntityUtils.toString(response.getEntity(), "UTF-8"); }*/ HttpEntity entity = response.getEntity(); result = EntityUtils.toString(entity, "utf-8"); System.out.println(" = = 请求返回 = = > > > > > > " + result); } catch (Exception e) { e.printStackTrace(); } finally { closeResource(response, httpClient); } return result; } /** * @Description post请求,参数k-v形式 * @Author msx * @Date 2021-08-29 21:13 * @param url-[请求地址] headMap-[请求头参数] paramMap-[请求参数] * @return String 返回结果 */ public static String doPost(String url, Map<String, String> headMap, Map<String, String> paramMap) { System.out.println(" = = 请求地址 = = > > > > > > " + url); System.out.println(" = = 请求参数 = = > > > > > > " + paramMap); //创建httpClient对象 CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse response = null; String result = ""; try{ //创建uri URIBuilder builder = new URIBuilder(url); if (paramMap != null && !paramMap.isEmpty()) { Set<Map.Entry<String, String>> entrySet = paramMap.entrySet(); for (Map.Entry<String, String> entry : entrySet) { builder.addParameter(entry.getKey(), entry.getValue()); } } URI uri = builder.build(); //创建http请求 HttpPost httpPost = new HttpPost(uri); //添加请求头 if (headMap != null && !headMap.isEmpty()) { System.out.println(" = = 请求头 = = > > > > > > "); Set<Map.Entry<String, String>> entries = headMap.entrySet(); for (Map.Entry<String, String> entry : entries) { System.out.println(entry.getKey() + ":" + entry.getValue()); httpPost.addHeader(entry.getKey(), entry.getValue()); } } // 执行请求 response = httpClient.execute(httpPost); result = EntityUtils.toString(response.getEntity(), "utf-8"); System.out.println(" = = 请求返回 = = > > > > > > " + result); }catch (Exception e){ e.printStackTrace(); }finally { //关闭资源 closeResource(response, httpClient); } return result; } /** * @Description post请求,请求体为JSON格式 * @Author msx * @Date 2021-08-27 16:31 * @param url-[请求地址] headMap-[请求头参数] paramMap-[请求参数] * @return String 返回结果 */ public static String doPost(String url, Map<String, String> header, String jsonParams){ System.out.println(" = = 请求地址 = = > > > > > > " + url); System.out.println(" = = 请求参数 = = > > > > > > " + jsonParams); //创建httpClient对象 CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse response = null; String result = ""; try{ //创建http请求 HttpPost httpPost = new HttpPost(url); httpPost.addHeader("Content-Type", "application/json"); //创建请求内容 StringEntity entity = new StringEntity(jsonParams, "utf-8"); entity.setContentType("application/json"); httpPost.setEntity(entity); // 设置请求头 if (null != header && !header.isEmpty()) { System.out.println(" = = 请求头 = = > > > > > > "); Set<Map.Entry<String, String>> entries = header.entrySet(); for (Map.Entry<String, String> e : entries) { System.out.println(e.getKey() + ":" + e.getValue()); httpPost.setHeader(e.getKey(), e.getValue()); } } response = httpClient.execute(httpPost); result = EntityUtils.toString(response.getEntity(), "utf-8"); System.out.println(" = = 请求返回 = = > > > > > > " + result); }catch (Exception e){ e.printStackTrace(); }finally { //关闭资源 closeResource(response, httpClient); } return result; } /** * @Description 关闭资源 * @Author msx * @Date 2021/9/8 10:44 */ private static void closeResource(Closeable ... resources) { System.out.println("> > > > > > > > > > 关闭流资源 > > > > > > > > > >"); try { for (Closeable resource : resources) { if (resource != null) { resource.close(); } } } catch (IOException e) { e.printStackTrace(); } } }
原创文章,有不足之处还请各路大神多多指点,多多包涵。
如需转载,请标明出处,不胜感激。
—— 码上仙更多相关内容 -
Java如何发起http请求
2021-02-22 21:01:06Java如何发起http请求前言一、GET与POST1.GET方法2.POST方法实现代码实例演示字符串转json结束 前言 在未来做项目中,一些功能模块可能会采用不同的语言进行编写。这就需要http请求进行模块的调用。那么下面,我将...前言
在未来做项目中,一些功能模块可能会采用不同的语言进行编写。这就需要http请求进行模块的调用。那么下面,我将以Java为例,详细说明如何发起http请求。
一、GET与POST
GET和POST是HTTP的两个常用方法。
GET指从指定的服务器中获取数据
POST指提交数据给指定的服务器处理1.GET方法
使用GET方法,需要传递的参数被附加在URL地址后面一起发送到服务器。
例如:http://121.41.111.94/submit?name=zxy&age=21
特点:- GET请求能够被缓存
- GET请求会保存在浏览器的浏览记录中
- 以GET请求的URL能够保存为浏览器书签
- GET请求有长度限制
- GET请求主要用以获取数据
2.POST方法
使用POST方法,需要传递的参数在POST信息中单独存在,和HTTP请求一起发送到服务器。
例如:
POST /submit HTTP/1.1
Host 121.41.111.94
name=zxy&age=21
特点:- POST请求不能被缓存下来
- POST请求不会保存在浏览器浏览记录中
- 以POST请求的URL无法保存为浏览器书签
- POST请求没有长度限制
实现代码
下面将Java发送GET/POST请求封装成HttpRequest类,可以直接使用。HttpRequest类代码如下:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; import java.util.List; import java.util.Map; public class HttpRequest { /** * 向指定URL发送GET方法的请求 * * @param url * 发送请求的URL * @param param * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return URL 所代表远程资源的响应结果 */ public static String sendGet(String url, String param) { String result = ""; BufferedReader in = null; try { String urlNameString = url + "?" + param; URL realUrl = new URL(urlNameString); // 打开和URL之间的连接 URLConnection connection = realUrl.openConnection(); // 设置通用的请求属性 connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 建立实际的连接 connection.connect(); // 获取所有响应头字段 Map<String, List<String>> map = connection.getHeaderFields(); // 遍历所有的响应头字段 for (String key : map.keySet()) { System.out.println(key + "--->" + map.get(key)); } // 定义 BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader( connection.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送GET请求出现异常!" + e); e.printStackTrace(); } // 使用finally块来关闭输入流 finally { try { if (in != null) { in.close(); } } catch (Exception e2) { e2.printStackTrace(); } } return result; } /** * 向指定 URL 发送POST方法的请求 * * @param url * 发送请求的 URL * @param param * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return 所代表远程资源的响应结果 */ public static String sendPost(String url, String param) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(param); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader( new InputStreamReader(conn.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送 POST 请求出现异常!"+e); e.printStackTrace(); } //使用finally块来关闭输出流、输入流 finally{ try{ if(out!=null){ out.close(); } if(in!=null){ in.close(); } } catch(IOException ex){ ex.printStackTrace(); } } return result; } }
实例演示
在搭建flask框架文章中,我们已经写好了一个功能模块show(). 该功能模块如下:
#app的路由地址"/show"即为ajax中定义的url地址,采用POST、GET方法均可提交 @app.route("/show",methods=["GET", "POST"]) def show(): #首先获取前端传入的name数据 if request.method == "POST": name = request.form.get("name") if request.method == "GET": name = request.args.get("name") #创建Database类的对象sql,test为需要访问的数据库名字 具体可见Database类的构造函数 sql = Database("test") try: #执行sql语句 多说一句,f+字符串的形式,可以在字符串里面以{}的形式加入变量名 结果保存在result数组中 result = sql.execute(f"SELECT type FROM type WHERE name='{name}'") except Exception as e: return {'status':"error", 'message': "code error"} else: if not len(result) == 0: #这个result,我觉得也可以把它当成数据表,查询的结果至多一个,result[0][0]返回数组中的第一行第一列 return {'status':'success','message':result[0][0]} else: return "rbq"
下面 我们利用POST方法发起请求,Java代码如下:
//创建发起http请求对象 HttpRequest h = new HttpRequest(); //向121.41.111.94/show发起POST请求,并传入name参数 String content = h.sendPost("http://121.41.111.94/show","name=张新宇"); System.out.println(content);
我们打印出content值,发现就是python中show()返回的json(在Java中,content被识别为String类型,而不是json)
(在转换过程中,不知道出什么问题了,中文显示了unicode编码。但在后面的转json格式后就没有这样的问题了)字符串转json
Java成功发起Http请求后,由于返回值是String类型,而不是原本python函数中的json格式。所以我们需要将字符串类型转为json格式,并通过键值对的形式得出message对应的值。
首先在maven中引入jar包:<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.28</version> </dependency>
转换代码如下:
import com.alibaba.fastjson.JSONObject; JSONObject jsonObject = JSONObject.parseObject(content); System.out.println(jsonObject); System.out.println(jsonObject.getString("message"));
运行结果:
结束
以上就是Java发起http请求,从而调用由python编写的功能模块。在使用python编写功能模块时,可以返回json格式的数据。在之后使用Java进行调用时,使用工具进行转换得出需要的数据。
-
HTTP请求行、请求头、请求体详解
2022-01-16 20:01:44HTTP请求报文解剖 HTTP Request :HTTP请求 Request Line:请求行 Header:请求头 Request Body:请求体 HTTP请求报文由3部分组成(请求行+请求头+请求体): 下面是一个实际的请求报文: ①是请求方法,HTTP/1.1 定义...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
你最希望看到的,即处理成功! -
HTTP请求的完全过程
2019-05-27 11:22:45HTTP请求的完全过程 1.1 浏览器根据域名解析IP地址 浏览器根据访问的域名找到其IP地址。DNS查找过程如下: 浏览器缓存:首先搜索浏览器自身的DNS缓存(缓存的时间比较短,大概只有1分钟,且只能容纳1000条缓存)...HTTP请求的完全过程
1.1 浏览器根据域名解析IP地址
浏览器根据访问的域名找到其IP地址。DNS查找过程如下:
- 浏览器缓存:首先搜索浏览器自身的DNS缓存(缓存的时间比较短,大概只有1分钟,且只能容纳1000条缓存),看自身的缓存中是否是有域名对应的条目,而且没有过期,如果有且没有过期则解析到此结束。
- 系统缓存:如果浏览器自身的缓存里面没有找到对应的条目,那么浏览器会搜索操作系统自身的DNS缓存,如果找到且没有过期则停止搜索解析到此结束。
- 路由器缓存:如果系统缓存也没有找到,则会向路由器发送查询请求。
- ISP(互联网服务提供商) DNS缓存:如果在路由缓存也没找到,最后要查的就是ISP缓存DNS的服务器。
1.2 浏览器与WEB服务器建立一个TCP连接
TCP的3次握手。
1.3 浏览器给WEB服务器发送一个HTTP请求
一个HTTP请求报文由请求行(request line)、请求头部(headers)、空行(blank line)和请求数据(request body)4个部分组成。
1.3.1 请求行
请求行分为三个部分:请求方法、请求地址URL和HTTP协议版本,它们之间用空格分割。例如,GET /index.html HTTP/1.1。
1.请求方法
HTTP/1.1 定义的请求方法有8种:GET(完整请求一个资源)、POST(提交表单)、PUT(上传文件)、DELETE(删除)、PATCH、HEAD(仅请求响应首部)、OPTIONS(返回请求的资源所支持的方法)、TRACE(追求一个资源请求中间所经过的代理)。最常的两种GET和POST,如果是RESTful接口的话一般会用到GET、POST、DELETE、PUT。
(1)GET
当客户端要从服务器中读取文档时,当点击网页上的链接或者通过在浏览器的地址栏输入网址来浏览网页的,使用的都是GET方式。GET方法要求服务器将URL定位的资源放在响应报文的数据部分,会送给客户端。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号‘?’代表URL的结尾与请求参数的开始,传递参数长度受限制。例如,/index.jsp?id=100&op=bind。通过GET方式传递的数据直接放在地址中,所以GET方式的请求一般不包含“请求内容”部分,请求数据以地址的形式表现在请求行。地址中‘?’之后的部分就是通过GET发送的请求数据,各个数据之间用‘&’符号隔开。显然这种方式不适合传送私密数据。另外,由于不同的浏览器对地址的字符限制也有所不同,一半最多只能识别1024个字符,所以如果需要传送大量数据的时候,也不适合使用GET方式。如果数据是英文字母/数字,原样发送;如果是空格,转换为+;如果是中文/其他字符,则直接把字符串用BASE64加密,得出:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。
(2)POST
允许客户端给服务器提供信息较多。POST方法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据,这样POST方式对传送的数据大小没有限制,而且也不会显示在URL中。POST方式请求行中不包含数据字符串,这些数据保存在“请求内容”部分,各数据之间也是使用‘&’符号隔开。POST方式大多用于页面的表单中。因为POST也能完成GET的功能,因此多数人在设计表单的时候一律都使用POST方式,其实这是一个误区。GET方式也有自己的特点和优势,我们应该根据不同的情况来选择是使用GET还是使用POST。
2.URL
URL:统一资源定位符,是一种资源位置的抽象唯一识别方法。
组成:<协议>://<主机>:<端口>/<路径>
端口和路径有事可以省略(HTTP默认端口号是80)
3.协议版本
协议版本的格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1
1.3.2 请求头部
请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔。
请求头部的最后会有一个空行,表示请求头部结束,接下来为请求数据。
1.3.3 请求数据
请求数据不在GET方法中使用,而在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最长使用的请求头部是Cntent-Type和Content-Length。下面是一个POST方法的请求报文:
POST /index.php HTTP/1.1 请求行
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2 请求头
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost/
Content-Length:25
Content-Type:application/x-www-form-urlencoded
空行
username=aa&password=1234 请求数据
1.4 服务器端响应HTTP请求,浏览器得到HTML代码
HTTP响应报文由状态行(status line)、相应头部(headers)、空行(blank line)和响应数据(response body)4个部分组成。
1.4.1 状态行
状态行由3部分组成,分别为:协议版本、状态码、状态码扫描。其中协议版本与请求报文一致,状态码描述是对状态码的简单描述。
1.4.2 响应头部
1.4.3 响应数据
用于存放需要返回给客户端的数据信息。
HTTP/1.1 200 OK 状态行
Date: Sun, 17 Mar 2013 08:12:54 GMT 响应头部
Server: Apache/2.2.8 (Win32) PHP/5.2.5
X-Powered-By: PHP/5.2.5
Set-Cookie: PHPSESSID=c0huq7pdkmm5gg6osoe3mgjmm3; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 4393
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8
空行
<html> 响应数据
<head>
<title>HTTP响应示例<title>
</head>
<body>
Hello HTTP!
</body>
</html>
1.5 浏览器解析HTML代码,并请求HTML代码中的资源
浏览器拿到HTML文件后,开始解析HTML代码,遇到静态资源时,就向服务器端去请求下载。
1.6 关闭TCP连接,浏览器对页面进行渲染呈现给用户
浏览器利用自己内部的工作机制,把请求到的静态资源和HTML代码进行渲染,呈现给用户。
-
http请求头相关解释
2022-03-16 17:57:02如下,请求头如图: 对应解释: Accept: application/json, text/plain, */* 告诉服务器我可以接收的内容类型(Content-types) Accept-Encoding: gzip, deflate 接收的压缩格式。例如 Accept-Encoding: ... -
HTTP请求方式中8种请求方法(简单介绍)
2021-07-20 22:26:19简单介绍 HTTP是超文本传输协议,其定义了客户端与服务器端之间文本传输的规范。HTTP默认使用80端口,这个...当我们没有指定端口访问时,浏览器会默认帮我们添加80端口。... ...HTTP请求的方法: HTTP/1.1协议中共定义了 -
http请求的四部分(请求行,请求头,空行,请求体)
2022-05-20 11:35:49抓包工具抓取数据 第一部分 :请求行 第二部分:请求头 第三部分:空行 第四部分:请求体(body) -
SpringBoot发送Http请求-RestTemplate
2020-05-14 12:05:41SpringBoot发送Http请求 [提前声明] 文章由作者:张耀峰 结合自己生产中的使用经验整理,最终形成简单易懂的文章 写作不易,转载请注明,谢谢! 大数据代码案例地址: https://github.com/Mydreamandreality/sparkResearch... -
Http请求的流程原理以及请求详解
2019-03-12 16:04:101.Http请求的基本流程 HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法。 HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)简单讲是HTTP的安全版,在... -
Selenium修改HTTP请求头三种方式
2022-02-22 20:39:35什么是HTTP请求头 HTTP请求头是HTTP 协议的重要组成部分。它们定义了 HTTP 消息(请求或响应)并允许客户端和服务器与消息交换可选的元数据。它们由不区分大小写的头字段名称后跟一个冒号,然后是头字段值组成。标题... -
HTTP请求与跨域
2021-11-11 16:49:141、浏览器解析用户输入的URL,生成一个HTTP格式的请求; 2、先根据URL域名从本地hosts文件查找是否有映射IP,如果没有就将域名发送给电脑配置的DNS进行域名解析,得到IP地址; 3、浏览器通过操作系统将请求通过四... -
一次完整的http请求过程
2021-07-12 10:44:10一次完整的http(超文本传输协议)请求过程会经历以下几个过程: 域名解析 把一个域名解析成可用的ip地址和端口号,Windows具体解析步骤如下: 1.搜索浏览器自身DNS缓存,如果没有过期,则解析结束。 2.如果浏览器... -
Http请求 url 请求头 请求体 大小长度限制
2020-06-23 11:19:54HTTP协议不对URI的长度作事先的限制,服务器必须能够处理任何他们提供资源的URI,并且应该能够处理无限长度的URIs,这种无效长度的URL可能会在客户端以基于GET方式的请求时产生。如果服务器不能处理太长的URI的时候... -
HTTP请求与响应(包含响应状态码、HTTPS)
2022-03-23 12:16:17一、通信 1. 通信是信息的传递和交换。 2. 通信三要素 通信主体、通信内容、通信方式。...采用【请求-响应】的交互模式。 2. HTTP发展 版本 产生时间 内容 HTTP/0.9 1991年 不涉及数据包传输;规定客 -
http请求头header、请求体body、请求行介绍
2019-06-09 09:47:54服务器的时候,http请求头的所有信息都封装在这个对象中,通过这个对象,可以获取客户端请求的所有信息。http请求包含请求行/状态行、请求头、请求体。 request如果是post才有请求体,get则没有请求体,直接跟在?... -
http请求 405错误
2022-03-17 17:23:51http请求 405错误 方法不被允许 (Method not allowed) 405错误常常伴随着POST请求,所有有好多人会告诉你这些: But 时候他并不能解决你的问题。 所以我说一点不一样的。 假如你有一个user类,里面有两个属性... -
【PHP】HTTP请求工具使用文档
2022-03-24 16:57:51使得一些日常使用http请求时,不需要去重复的配置curl信息,减少开发工作量。 导入使用 下载链接:https://download.csdn.net/download/d745282469/85030673 如果是用的TP框架,则可在public/index.php中按照以下... -
协议层的攻击:HTTP请求走私
2019-10-11 16:03:20作者:mengchen@知道创宇404实验室...最近在学习研究BlackHat的议题,其中有一篇议题——"HTTP Desync Attacks: Smashing into the Cell Next Door"引起了我极大地兴趣,在其中,作者讲述了HTTP走私攻击这一攻击手段... -
HTTP请求的过程和原理
2022-03-14 13:48:32HTTP请求的过程和原理-面试回答 -
Java模拟Http请求封装工具类
2020-06-29 16:54:27封装一个简单的Http请求工具类,主要方便设置代理请求,无需额外框架 1、需要引入的jar包 <!-- 简化代码getter setter --> <dependency> <groupId>org.projectlombok</groupId> <... -
谷歌浏览器查看http请求,请求头请求体响应数据和状态
2022-01-17 17:27:30谷歌浏览器查看http请求,请求头请求体响应数据和状态 -
Postman抓取HTTP请求
2021-10-24 22:13:24抓取HTTP请求一、前言二、Potman内置代理三、设置Postman代理 一、前言 如果用户正在使用API构建客户端应用程序-移动应用程序、网站或桌面应用程序,可能希望看到在应用程序中发送和接收的实际HTTP请求。Postman提供... -
一个完整的HTTP请求过程详细
2018-05-29 14:41:54一个完整的HTTP请求过程 整个流程 域名解析 —> 与服务器建立连接 —> 发起HTTP请求 —> 服务器响应HTTP请求,浏览器得到html代码 —> 浏览器解析html代码,并请求html代码中的资源... -
Java发送Http请求之——发送请求参数在Body中Get请求
2020-09-10 17:01:50发送Get请求,但是请求参数要放在请求body内,所以经过多方查证后整理出来以下代码。 2.POM依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>... -
如何利用JMeter录制HTTP请求做接口测试
2021-10-04 11:25:25今天给大家介绍利用JMeter录制手机APP和PC端web HTTP请求做接口性能测试的方法,文章有点长,希望对大家的工作有一定的帮助。 一、JMeter录制手机APP HTTP请求 1.PC端配置:启动JMeter,测试计划>Threads... -
Java常用http请求库
2022-04-01 14:22:57常用http请求库 1. HttpClient 使用方法 使用示例 2. OKhttp 使用方法 使用示例 3. Retrofit 相关注解 使用方法 使用示例 4. RestTemplate 使用方法 使用示例 -
jmeter辅助功能详解(http请求默认值,断言)
2021-10-22 10:42:49当我们做测试的时候发现要在jmeter上创建多个http的请求,但是每个请求都需要重新的在请求里添加协议,端口号路由和路径的等,如果是几个接口还好,如果是10个,100个接口的话,相当于就是我们再http请求里需要添加... -
Http请求中获取请求的真实的IP地址
2020-09-14 22:02:59获取客户端IP一、标题网络上常见的请求头1、X-Forwarded-For2、Proxy-Client-IP3、WL- Proxy-Client-IP4、HTTP_CLIENT_IP5、X-Real-IP二、注意事项1、非标准请求头2、不一定存在3、多重代理顺序4、请求头伪造三、...