python中用于请求http接口的有自带的urllib和第三方库requests,但 urllib 写法稍微有点繁琐,所以在进行接口自动化测试过程中,一般使用更为简洁且功能强大的 requests 库。下面我们使用 requests 库发送get请求。

requests库

简介

requests 库中提供对用的方法用于常用的HTTP请求,对应如下:

requests.get()			# 用于GET请求
requests.post() # 用于POST请求
requests.put() # 用于PUT请求
requests.delete() # 用于DELETE请求

当然还有更多的方法,这里只列举常用的。

安装

安装命令:pip install requests

发送get请求

get请求参数格式说明

requests 中的 get 方法源码如下:

def get(url, params=None, **kwargs):
r"""Sends a GET request. :param url: URL for the new :class:`Request` object.
:param params: (optional) Dictionary, list of tuples or bytes to send
in the query string for the :class:`Request`.
:param \*\*kwargs: Optional arguments that ``request`` takes.
:return: :class:`Response <Response>` object
:rtype: requests.Response
""" kwargs.setdefault('allow_redirects', True)
return request('get', url, params=params, **kwargs)

参数说明:

  1. url,即接口地址
  2. params,接口参数,可选(即可填可不填)
  3. **kwargs,可以添加其他请求参数,如设置请求头headers、超时时间timeout、cookies等

不带参数请求

import requests

res = requests.get(url="https://www.cnblogs.com/lfr0123/")
# 请求得到的res是一个Response对象,如果想要看到返回的文本内容,需要使用.text
print(res.text)

带参数请求

import requests

url = "http://www.baidu.com/s"
params = {"wd": "给你一页白纸-博客园", "ie": "utf-8"}
res = requests.get(url=url, params=params)
print(res.text)

加入请求头headers

有些接口限制只能被浏览器访问,这时按照上面的代码去请求就会被禁止,我们可以在代码中加入 headers 参数伪装成浏览器进行接口请求,示例如下:

import requests

url = "http://www.baidu.com/s"
params = {"wd": "给你一页白纸-博客园", "ie": "utf-8"} # User-Agent的值为浏览器类型
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"
} res = requests.get(url=url, params=params, headers=headers)
print(res.text)

部分结果如下:

这里的响应体其实就是在百度中搜索给你一页白纸-博客园的结果页面。

除此之外,还可以加入timeout、cookies等,写法如下:

# timeout只限制请求的超时时间,单位为s,若超时则报错
res = requests.get(url=url, params=params, headers=headers, timeout=20, cookies=cookies)

响应内容

发送请求后会获取到接口响应的内容,如上面示例中res.text,其他响应内容获取方式如下:

res.status_code		# 响应状态码
res.headers # 响应头
res.encoding # 响应体编码格式
res.text # 响应体,字符串形式的文本信息
res.content # 响应体,二进制形式的文本信息,会自动解码
res.cookies # 响应的cookie
res.json() # 响应体格式为json,则需要通过json()进行解码

这里需要注意,res.textres.content的使用,具体使用哪种方式获取响应体内容,需要根据编码方式进行选择,最笨的方法就是一种不行换另一种试试。

示例如下:

import requests

url = "http://www.baidu.com/s"
params = {"wd": "给你一页白纸-博客园", "ie": "utf-8"}
# User-Agent的值为浏览器类型
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"
} res = requests.get(url=url, params=params, headers=headers)
print(res.text)
print(res.status_code)
print(res.headers)
print(res.encoding)
print(res.cookies)

结果如下:

结果中由上而下依次对应代码中print的响应内容。

最新文章

  1. Owin SelfHost Asp.net WebApi 遇到 No type was found that matches the controller named &#39;ControllerName&#39; 异常的解决方案
  2. ios手势
  3. OpenMesh 读写网格控制(读取写入纹理坐标,法向等)
  4. 数据库添加数据I
  5. java中path和classpath
  6. vs2008 + OpenCV-2.1.0-win32-vs2008安装
  7. 采用rest接口对接而非webservice
  8. subversion SVN global ignore pattern
  9. box2d中的物理世界
  10. 文件查找---find
  11. 初学Python(四)——set
  12. 通过 Azure Pipelines 实现持续集成之docker容器化及自动化部署
  13. mysql ssh 跳板机(堡垒机???)连接服务器
  14. Windows服务器防火墙配置规范
  15. 洛谷P1395 会议 题解
  16. iOS开发(3):tips提示 | 如何提示一行文字或一个图片
  17. linux-2.6.26内核中ARM中断实现详解(转)
  18. Webbrowser指定IE内核版本(更改注册表)
  19. python的Web框架,Django模板变量,过滤器和静态文件引入
  20. 使用POI读取/创建Execl(.xlsx)文件

热门文章

  1. Visualizing and Understanding Convolutional Networks论文复现笔记
  2. 实际工程中加快 Java 代码编写的小提示
  3. ARP数据包分析
  4. Socket和数据库的一些使用---郭雪彬
  5. idea导入mavenJar、mavenWeb项目
  6. sublime与python交互
  7. 如何在Kubernetes 里添加自定义的 API 对象(一)
  8. 一文说透https中的s是什么?
  9. 框架5--nginx安装部署 上(web服务)
  10. Solution -「多校联训」轮回