一、网络请求工具-CURL
简介:
CURL是一个非常强大的开源库,支持很多协议,包括HTTP、FTP、TELNET等,我们使用它来发送HTTP请求。它可以通过灵活的选项设置不同的HTTP协议参数,并且支持HTTPS。CURL可以根据URL前缀是“HTTP” 还是“HTTPS”自动选择是否加密发送内容。
使用CURL发送请求的基本流程:
- 初始化连接句柄;
- 设置CURL选项;
- 执行并获取结果;
- 释放CURL连接句柄;
// 1. 初始化
$ch = curl_init();
// 2. 设置选项,包括URL
curl_setopt($ch,CURLOPT_URL,"http://www.xxx.net");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); // 获取的信息以文件流的形式返回
curl_setopt($ch,CURLOPT_HEADER,0); //查询显示返回的Header区域内容
// 3. 执行并获取HTML文档内容
$output = curl_exec($ch);
if($output === FALSE ){
echo "CURL Error:".curl_error($ch);
}
// 4. 释放curl句柄
curl_close($ch);
}
CURL常用命令:
1.直接查看页面源码信息
1.curl https://maoyan.com/ 直接查看页面源代码
2.curl -o baidu.html www.baidu.com //保存页面信息到本地,如果O大写,后面的url要具体到某个文
//件,不然抓不下来。我们还可以用正则来抓取东西
3.curl -L www.sina.com //网址自动跳转到www.sina.com.cn
4.curl -v www.baidu.com //可以显示一次http通信的整个过程,包括端口连接和http request头信息
5.curl --trace output.txt www.baidu.com //获取更详细的通信过程
curl --trace-ascii output.txt www.baidu.com
6.curl example.com/form.cgi?data=xxx //GET请求
7.curl -X POST --data "data=xxx" example.com/form.cgi //POST请求
8.curl -X POST--data-urlencode "date=April 1" url //如果你的数据没有经过表单编码,CURL编码
9.curl -X DELETE www.example.com
curl -X PUT www.baidu.com
10.curl --cookie "name=xxx" www.example.com //可发送cookie
11.curl --header "Content-Type:application/json" http://example.com //增加头信息
12.curl --user name:password example.com //有些网域需要HTTP认证,这时需要用到--user -u
13.curl --help //查看帮助
14.curl -i www.baidu.com 只显示response //头信息,-v 子集
15.curl -I www.baidu.com //只显示头信息
16.curl -b "cookie.txt" -F "filename=@file" url //文件上传、-F 将会以multipart/form-
//data发送POST数据;如果是发送文件的话,需要在参数前面加@
17.curl -C -O http://www.linux.com/dodo1.JPG //断点续传
常用参数:
-I/--head | 只显示传输文档,经常用于测试连接本身,头信息 |
-o/--output | 把输出写到该文件中,必须输入保存文件名 |
-O/--remote-name | 把输出写到该文件中,保留远程文件的文件名 |
-F/--form | 模拟表单提交 |
-s/--silent | 静默模式,不输出任何东西 |
-L/--location | 跟踪重定向 |
-p/--proxytunnel | 使用HTTP代理 |
-T/--upload-file | 上传文件 |
-u/--user | 设置服务器的用户和密码 |
-6/--ipv6 | 使用IP6 |
-4/--ipv4 | 使用IP4 |
-#/--progress-bar | 用进度条显示当前的传送状态 |
--retry | 传输出现问题时,重试的次数 |
--retry-delay | 传输出现问题时,设置重试间隔时间 |
--retry-max-time | 传输出现问题时,设置最大重试时间 |
-f/--fail | 不输出错误 |
-n/--netrc | 从netrc文件中读取用户名和密码 |
--netrc-optional | 使用 .netrc 或者 URL来覆盖-n |
--ntlm | 使用 HTTP NTLM 身份验证 |
--trace | 对指定文件进行debug |
--trace-ascii Like | 跟踪但没有hex输出 |
--trace-time 跟踪/ | 详细输出时,添加时间戳 |
-U/--proxy-user | 设置代理用户名和密码 |
-V/--version | 显示版本信息 |
-w/--write-out [format] | 什么输出完成后 |
-x/--proxy | 在给定的端口上使用HTTP代理 |
-X/--request | 指定什么命令 |
-y/--speed-time | 放弃限速所要的时间。默认为30 |
-Y/--speed-limit | 停止传输速度的限制,速度时间'秒 |
-z/--time-cond | 传送时间设置 |
-0/--http1.0 | 使用HTTP 1.0 |
-1/--tlsv1 | 使用TLSv1(SSL) |
-2/--sslv2 | 使用SSLv2的(SSL) |
-3/--sslv3 | 使用的SSLv3(SSL) |
--3p-quote | like -Q for the source URL for 3rd party transfer |
--3p-url | 使用url,进行第三方传送 |
--3p-user | 使用用户名和密码,进行第三方传送 |
-S/--show-error | 显示错误,在选项 -s 中,当 curl 出现错误时将显示 |
-p/--proxytunnel | 使用HTTP代理 |
--proxy-anyauth | 选择任一代理身份验证方法 |
--proxy-basic | 在代理上使用基本身份验证 |
--proxy-digest | 在代理上使用数字身份验证 |
--proxy-ntlm | 在代理上使用ntlm身份验证 |
-P/--ftp-port | 使用端口地址,而不是使用PASV |
-M/--manual | 显示全手动 |
-Q/--quote | 文件传输前,发送命令到服务器 |
-r/--range | 检索来自HTTP/1.1或FTP服务器字节范围 |
--range-file | 读取(SSL)的随机文件 |
-R/--remote-time | 在本地生成文件时,保留远程文件时间 |
二、网络请求工具Postman
postman是一个可视化的网络请求工具,在google浏览器以插件形式存在,也有对应的软件供我们下载使用
图形界面以及用法:
三、抓包工具-Charles
Charles 是在 Mac 下常用的网络封包截取工具,在做 移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。除了在做移动开发中调试端口外,Charles 也可以用于分析第三方应用的通讯协议。配合 Charles 的 SSL 功能,Charles 还可以分析 Https 协议。Charles 主要的功能包括:
- 截取 Http 和 Https 网络封包。
- 支持重发网络请求,方便后端调试。
- 支持修改网络请求参数。
- 支持网络请求的截获并动态修改。
- 支持模拟慢速网络。
下载与安装
1.下载安装-自己的云盘
链接:https://pan.baidu.com/s/1qHsAqmz4o_puCgFgljhA4w 密码:q49f
把对应的jar包进行替换就可以破解 (mac地址:/Applications/Charles.app/Contents/Java )
2.当然能下载到官网的最好
https://www.charlesproxy.com/download/
3.关于安装
将 Charles 设置成系统代理:Charles 是通过将自己设置成代理服务器来完成封包截取的,所以使用 Charles 的第一步 是 将其设置成系统的代理服务器 ,之后,你就可以看到源源不断的网络请求出现在 Charles 的界面中。
Charles 主要提供两种查看封包的视图: Structure 、Sequence
Structure:将网络请求按访问的域名分类
Sequence:将网络请求按访问的时间排序
过滤网络请求:
方法一:在主界面的中部的 Filter 栏中填入需要过滤出来的关键字。例如我们的服务器的地址是:http://yuantiku.com , 那么只需要在 Filter 栏中填入 yuantiku 即可。
方法二:在 Charles 的菜单栏选择 “Proxy”–>“Recording Settings->Include->Add”,然后选择 Include 栏,选择添加一个项目,然后填入需要监控的协议,主机地址,端口号。这样就可以只截取目标网站的封包了
方法三:在想过滤的网络请求上右击,选择 “Focus”,之后在 Filter 一栏勾选上 Focussed 一项
截取手机上的网络封包:
1.要截取 iPhone 上的网络请求,我们首先需要将 Charles 的代理功能打开。在 Charles 的菜单栏上选择 “Proxy”–>“Proxy Settings”,填入代理端口 8888,并且勾上 “Enable transparent HTTP proxying” 就完成了在 Charles 上的设置
2.Charles 的顶部菜单的 “Help”–>“Local IP Address”,即可在弹出的对话框中看到 IP 地址
3.手机上设置:将手机wifi 代理配置为手动,输入代理端口号8888 以及代理服务器 本机地址
4.设置好之后,我们打开 iPhone 上的任意需要网络通讯的程序,就可以看到 Charles 弹出 iPhone 请求连接的确认菜单,点击 “Allow” 即可完成设置。
截取 Https 通讯信息
安装证书:如果你需要截取分析 Https 协议相关的内容。那么需要安装 Charles 的 CA 证书
1.首先我们需要在 Mac 电脑上安装证书。点击 Charles 的顶部菜单,选择 “Help” –> “SSL Proxying” –> “Install Charles Root Certificate”,然后输入系统的帐号密码,即可在 KeyChain 看到添加好的证书
2.需要注意的是,即使是安装完证书之后,Charles 默认也并不截取 Https 网络通讯的信息,如果你想对截取某个网站上的所 有 Https 网络请求,可以在该请求上右击,选择 SSL proxy
截取移动设备中的 Https 通讯信息
1.点击 Charles 的顶部菜单,选择 “Help” –> “SSL Proxying” –> “Install Charles Root Certificate on a Mobile Device or Remote Browser”,然后就可以看到 Charles 弹出的简单的安装教程
2.按照我们之前说的教程,在设备上设置好 Charles 为代理后,在手机浏览器中访问地址:http://charlesproxy.com/getssl,即可打开证书安装的界面,安装完证书后,就可以截取手机上的 Https 通讯内容了。不过同样需要注意,默认情况下 Charles 并不做截取,你还需要在要截取的网络请求上右击,选择 SSL proxy 菜单项。
模拟慢速网络
在做移动开发的时候,我们常常需要模拟慢速网络或者高延迟的网络,以测试在移动网络下,应用的表现是否正常。Charles 对 此需求提供了很好的支持。
在 Charles 的菜单上,选择 “Proxy”–>“Throttle Setting” 项,在之后弹出的对话框中,我们可以勾选上 “Enable Throttling”,并且 可以设置 Throttle Preset 的类型
如果我们只想模拟指定网站的慢速网络,可以再勾选 “Only for selected hosts” 项,然后在对话框的下半部分设置中增加指定的 hosts 项即可
修改网络请求内容
如下图:选中想要修改的请求url,点击右上角编辑图标,进行编辑,最后点击Execute执行。
给服务器做压力测试
我们可以使用 Charles 的 Repeat 功能来简单地测试服务器的并发处理能力,我们在想打压的网络请求上(POST 或 GET 请求均可)右击,然后选择 「Repeat Advanced」菜单项,如下所示:
修改服务器返回内容
Charles 提供了 Map 功能、 Rewrite 功能以及 Breakpoints 功能,都可以达到修改服务器返回内容的目的。这三者在功能上的差异是:
- Map 功能适合长期地将某一些请求重定向到另一个网络地址或本地文件。
- Rewrite 功能适合对网络请求进行一些正则替换。
- Breakpoints 功能适合做一些临时性的修改。
Map:
在 Charles 的菜单中,选择 “Tools”–>“Map Remote” 或 “Map Local” 即可进入到相应功能的设置页面。
对于 Map Local 功能,我们需要填写的重定向的源地址和本地的目标文件。对于有一些复杂的网络请求结果,我们可以先使用 Charles 提供的Save Response,将请求结果保存到本地,然后进行修改,成为我们的目标映射文件.
Rewrite :
适合对某一类网络请求做一些正则替换,达到修改结果的目的,比较适合做批量和长期替换
Breakpoints:
很多适合我们需要做一些临时的修改,对一次网络请求进行结果修改,Breakpoints功能类似设置断点,当指定请求发生时,Charles会截获该请求,这个适合我们可以在Charles中临时修改请求返回的内容。注意要避免暂停时间过长而导致请求超时或者关闭。
乱码解决:
1.打开Charles,上方菜单栏->Help->SSL Proxying->Install Charles Root Certificate,搜索Charles Proxy CA,修改为始终信任。
2. Proxy->SSL Proxy Settings->Add