构造http请求的方式有两种:(1)通过代码构造(有一点难度) (2)通过第三方工具构造(非常容易)。
下面介绍第三方工具构造http请求,这个工具就是:postman。下面介绍postman的下载安装以及简单介绍
一、postman 的下载安装以及简单介绍
1、下载安装
因为我没有挂梯子,官网加载不出来(官网地址:Postman API Platform),大家就自行在网上找资源吧,下载完后,我们按照指引,往下next。具体安装细节,可以参考这位大佬文章:postman官网下载安装登录测试详细教程-CSDN博客
第一次安装,需要进行登录,我们注册一个账户。如图:
登录完成后的界面,如图:
2、postman的介绍
点击Workspaces,这里指的是工作空间,我们点击创建新的工作空间,如图:
选择一些选项,如图:
创建完后,点击这里的+号,如图:
就可以构造http请求了,如图:
这里每个标签页,都是一个构造http请求的配置页面,上面的send按钮,是发送请求到目标服务器的按钮。
构造请求的一些功能选项
url,可以在这里写入,如图:
query string可以在这里添加,如图:
添加 a = 11,b = 22,如图:
报头(header),如图:
正文(body),如图:
然后我们点击send(发送HTTP请求)试试,下面这里会得到一个响应的结果,如图:
对了,postman还可以生成对应语言的代码,如图,点击这个选项:
随便选择一个,如图:
这就是对应语言,使用代码构造的HTTP请求。
okHttpClient是一个比较知名的 Java 的客户端的 HTTP 客户端库,后续如果要用到它,但不知道代码咋写,就可以在这里生成代码。
除此之外,postman还是一个有对象的软件,它的对象是postwoman。
构造http请求还能使用 form表单 和 ajax,这里就不做讨论了。
二、通过 Java socket 构造 HTTP 请求
所谓的 HTTP 请求,本质就是按照HTTP的格式,往TCP Socket 里写入一个字符串;所谓的 HTTP 响应,本质就是按照TCP Socket 中读取一个字符串,按照 HTTP 协议的格式来解析;
基于 Socket 的知识,完全可以构造出一个简单的 HTTP 客户端程序,用来发送 HTTP 请求,代码如下:
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; public class HttpClient { private Socket socket; private String ip; private int port; public HttpClient(String ip, int port) throws IOException { this.ip = ip; this.port = port; socket = new Socket(ip, port); } public String get(String url) throws IOException { StringBuilder request = new StringBuilder(); // 构造⾸⾏ request.append("GET " + url + " HTTP/1.1\n"); // 构造 header request.append("Host: " + ip + ":" + port + "\n"); // 构造 空⾏ request.append("\n"); // 发送数据 OutputStream outputStream = socket.getOutputStream(); outputStream.write(request.toString().getBytes()); // 读取响应数据 InputStream inputStream = socket.getInputStream(); byte[] buffer = new byte[1024 * 1024]; int n = inputStream.read(buffer); return new String(buffer, 0, n, "utf-8"); } public String post(String url, String body) throws IOException { StringBuilder request = new StringBuilder(); // 构造⾸⾏ request.append("POST " + url + " HTTP/1.1\n"); // 构造 header request.append("Host: " + ip + ":" + port + "\n"); request.append("Content-Length: " + body.getBytes().length + "\n"); request.append("Content-Type: text/plain\n"); // 构造 空⾏ request.append("\n"); // 构造 body request.append(body); // 发送数据 OutputStream outputStream = socket.getOutputStream(); outputStream.write(request.toString().getBytes()); // 读取响应数据 InputStream inputStream = socket.getInputStream(); byte[] buffer = new byte[1024 * 1024]; int n = inputStream.read(buffer); return new String(buffer, 0, n, "utf-8"); } public static void main(String[] args) throws IOException { HttpClient httpClient = new HttpClient("42.192.83.143", 8080); String getResp = httpClient.get("/AjaxMockServer/info"); System.out.println(getResp); String postResp = httpClient.post("/AjaxMockServer/info", "this is body"); System.out.println(postResp); } }