文章目录
Requests/Fiddler/Session/Cookie详细讲解
Requests库简介
Requests 库 是用来发送HTTP请求,接收HTTP响应的一个Python库。
Requests库经常被用来 爬取 网站信息。 用它发起HTTP请求到网站,从HTTP响应消息中提取信息。
Requests库也经常被用来做 网络服务系统的Web API 接口测试。因为Web API 接口的消息基本上都是通过HTTP协议传输的。
Python中构建HTTP请求的库有很多,其中 Requests 库最为广泛使用,因为它使用简便,功能强大。
要深入的掌握一款工具、一个库,大家要学会通过官方文档学习具体使用。光靠一些教程是不够的。因为详细的信息,通常都在官方文档内。
Requests官方网站https://2.python-requests.org/en/master/
Requests中文文档:https://docs.python-requests.org/zh_CN/latest/
Requests库不是Python标准库,而是第三方开发的。 所以需要我们安装一下。
安装:pip install requests
Requests可以很方便的发送HTTP请求给服务器。如下:
import requests
response = requests.get('https://www.baidu.com/')
print(response.text)
我们使用 request库里面的get方法就可以发起一个http 的get请求。 里面的参数就是http请求的url,这里 就是 https://www.baidu.com/
我们常见的http请求的方法 除了 get, 还有 post、put、delete等。
发送这些请求的方法也是调用同名的函数 post、put、delete 等。
请求可以这样发出去,那么我们的程序怎么获得 服务端的响应消息呢?
这些 get、post、put、delete 函数被用,发送http消息给 服务端后,都会返回一个Requests库里面定义的一个 Response 类的实例对象。 这个对象代表着响应消息。
上面的例子中 response.text
使用了这个对象的 text 属性。就返回了http响应消息体中的文本内容。
大家运行一下上面的程序看看,就可以打印出百度服务器返回的html内容。
抓包工具 fiddler
在做接口测试的时候, 经常需要用到 抓包工具 ,来查看具体发送的请求消息,和接收的响应消息。
fiddler 就是常用的一款 HTTP 抓包工具。
fiddler 是 代理式 抓包。
fiddler 启动后,会启动一个代理服务器(同时设置自己作为系统代理),监听在 8888 端口上。
HTTP客户端需要设置 fiddler 作为代理, 把HTTP请求消息 发送给 fiddler, fiddler再转发HTTP消息给服务端。
服务端返回消息也是先返回给 fiddler,再由fiddler转发给 客户端。
请求响应消息都经过了 fiddler,fiddler自然就抓到了 HTTP请求和响应,可以展示出来给大家查看。
下载fidder安装包
安装好以后,要抓到 HTTP 包,必须设置好客户端,让客户端使用 fiddler作为代理。
浏览器抓包
浏览器可以通过其代理配置,指定使用fiddler作为代理,从而让fiddler抓到包。
但是浏览器本身F12打开的开发者窗口,就可以很方便的看到HTTP消息,所以不需要fiddler抓包。
requests程序抓包
要让requests 发送请求使用代理,只需要如下参数进行设定即可
import requests
proxies = {
'http': 'http://127.0.0.1:8888',
'https': 'http://127.0.0.1:8888',
}
response = requests.get('https://www.baidu.com/', proxies=proxies)
print(response.text)
手机抓包
将来进行 API 接口测试的时候,可能需要抓 手机App 和 web服务之间的 HTTP消息。
这时候,需要设置手机使用 fiddler作为代理。
首先确保 手机使用的 WIFI 和 运行fiddler的电脑 必须使用同一个子网,比如使用同一个WIFI信号连接。
大家可以网上搜索学习一下
构建HTTP请求
构建请求URL参数
什么是url参数?
比如:https://www.baidu.com/s?wd=iphone&rsv_spt=1
问号后面的部分 wd=iphone&rsv_spt=1 就是 url 参数,
每个参数之间是用 & 隔开的。
上面的例子中 有两个参数 wd 和 rsv_spt, 他们的值分别为 iphone 和 1 。
url参数的格式,有个术语叫 urlencoded 格式。
使用Requests发送HTTP请求,url里面的参数,通常可以直接写在url里面,比如
response = requests.get('https://www.baidu.com/s?wd=iphone&rsv_spt=1')
但是有的时候,我们的url参数里面有些特殊字符,比如 参数的值就包含了 & 这个符号。
那么我们可以把这些参数放到一个字典里面,然后把字典对象传递给 Requests请求方法的 params 参数,如下:
urlpara = {
'wd':'iphone&ipad',
'rsv_spt':'1'
}
response = requests.get('https://www.baidu.com/s',params=urlpara)
构建请求消息头
有时候,我们需要自定义一些http的消息头
每个消息头也就是一种 键值对的格式存放数据,如下所示
user-agent: my-app/0.0.1
auth-type: jwt-token
Requests发送这样的数据,只需要将这些键值对的数据填入一个字典。
然后使用post方法的时候,指定参数 headers 的值为这个字典就可以了,如下
headers