赞
踩
前言
requests
库是 Python 中用于发送 HTTP 请求的一个非常流行的库,它简单易用,广泛应用于各种场景。主要用于爬虫和Web 服务的测试.前者是对外进行数据的收集,后者就是服务的性能.
目录
requests
库用于实现HTTP请求.那我们最好了解一下HTTP协议以及请求类型.
一种用于传输超文本的应用层协议,是Web上数据交换的基础。
HTTP使用TCP作为其传输层协议,通常在TCP的80端口进行通信。
无连接:HTTP协议是无连接的,即每次请求都是独立的,服务器在处理完客户端的请求后立即断开连接。这样也就意味着服务器无法保留之前的请求状态,每个请求都是相互独立的。
无状态:HTTP协议是无状态的,即每次请求之间没有关联,服务器不会保存客户端的状态信息。因此,每次请求需要携带足够的信息来帮助服务器理解客户端的请求。
基于请求-响应模型:HTTP协议是基于请求-响应模型的,客户端发送一个请求给服务器,服务器处理请求并返回一个响应给客户端。
支持多种请求方法:HTTP定义了多种请求方法,如GET、POST、PUT、DELETE等,用于指定对资源的不同操作。
URI(Uniform Resource Identifier):HTTP使用URI来唯一标识和定位资源,包括URL和URN。
报文格式:HTTP的通信内容由请求报文和响应报文组成,这些报文中包含了头部和消息体,头部包含了与请求或响应相关的信息,消息体包含实际的数据。
状态码:HTTP使用状态码来表示请求的处理结果,常见的状态码有200(成功)、404(未找到)、500(服务器内部错误)等。
GET:用于请求指定的资源,只请求获取数据,不对服务器上的资源做任何修改。通常用于获取网页、图片、文件等。
POST:用于向服务器提交数据,常用于提交表单数据、上传文件等,可以对服务器上的资源进行添加、修改或处理。
PUT:用于向服务器上传新的内容,通常用于更新资源或新建资源。
DELETE:用于请求服务器删除指定的资源。
HEAD:类似于 GET 请求,但是服务器只返回头部信息,不返回实际内容,用于获取资源的元信息而不传输实体主体。
OPTIONS:用于获取目的资源所支持的通信选项,常用于跨域请求时进行预检请求。
PATCH:用于对资源进行部分修改,类似于 PUT 请求,但是用于更新部分资源而不是整个资源。
实际上,爬虫经常用到的请求类型为GET方法(绝大多数情况);
Web 服务测试则是GET方法和POST方法.
接下来主要介绍GET方法和POST方法的说明和应用.
requests
库安装requests库过程中,会将依赖库(urllib3等库)也一起进行安装.
注:httpbin.org 这个网站能测试 HTTP 请求和响应的各种信息,比如 cookie、ip、headers 和登录验证等,且支持 GET、POST 等多种方法,对 web 开发和测试很有帮助。
- url (必需):类型:字符串 描述:请求的目标 URL 地址。
- params (可选):类型:字典、列表元组对或其他可迭代对象
描述:URL 查询字符串参数,键值对形式附加到 URL 末尾- headers (可选) 类型:字典
描述:HTTP 请求头信息,用以提供客户端和服务器之间额外的信息,如用户代理、接受类型等。- proxies (可选):类型:字典
描述:设置访问目标 URL 时使用的代理服务器。键应为 'http', 'https' 等协议名,值为代理服务器地址与端口。- verify (可选):类型:布尔值或路径字符串
描述:控制 SSL 认证是否开启。默认情况下,对于 HTTPS 请求,会验证服务器证书的有效性。如果设置为 False,将禁用 SSL 验证;若指定一个 CA_BUNDLE 文件路径,则使用该证书进行验证。- timeout (可选):类型:整数/浮点数(秒)或 tuple(连接超时, 读取超时)
描述:设置请求的超时时间。如果不设置,系统默认会有一个超时限制。可以单独设定连接超时和读取响应内容的超时时间。- cookies (可选):类型:字典或 CookieJar 对象
描述:直接向服务器发送 cookies。
注:请求时,url是一定要提供的.部分网站反爬,需要设置header参数(浏览器标识信息),来达到一定的伪装.
requests.get() 方法在发送一个 HTTP GET 请求后,会返回一个 Response 对象。
这个对象包含了从服务器获取的所有相关信息
主要属性和方法如下
- response.status_code:类型:整数
描述:HTTP 状态码,如 200 表示请求成功,404 表示未找到资源等。
- response.text:类型:字符串
描述:以文本(str)形式返回服务器响应的内容,默认编码根据 Content-Type 头部确定,如果没有指定,则按照 chardet 库自动检测的编码来解码。
- response.content:类型:字节串 (bytes)
描述:以二进制形式返回服务器响应的数据。
- response.json():类型:Python 字典或列表(若响应内容是 JSON 格式)
描述:将服务器响应的内容解析为 Python 数据结构(如果响应内容可以被 json 模块解析的话)。
- response.headers:类型:字典
描述:包含服务器返回的所有头部信息。
- response.cookies:类型:RequestsCookieJar 对象
描述:服务器返回的 cookie 信息。
- response.url:类型:字符串
描述:最终用于请求的实际 URL,可能会由于重定向而与初始请求的 URL 不同。
- response.history:类型:Response 对象列表
描述:如果请求过程中发生了重定向,此属性会记录所有中间的重定向响应。
- 其他属性和方法:
.elapsed(请求耗时)
.encoding(响应内容的字符编码)
.raise_for_status()(如果状态码不是 200 系列,抛出异常)等等。
响应状态码 status_code很重要,反馈是200,表示成功访问.
使用这个库时,一定要注意状态码是否为200,再进行接下去的其它动作.比如状态码为403时,说明被禁止访问,需要添加请求头等方式来伪装一下.
- import requests
- r = requests.get('https://www.baidu.com/')
- print(r.status_code) # 200
下面介绍参数传递的两种方法,效果是一样的.
①下面示例说明,请求时可以如何使用params参数进行参数传递
- payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
- r = requests.get('http://httpbin.org/get', params=payload)
- print(r.text)
- print(r.url)
②在url后面+?,参数用key=value的方式添加,多个参数用&来分隔.
格式为url?key1=value1&key2=value2
- payload = {'key1': 'value1', 'key2': 'value2'}
- r = requests.get("http://httpbin.org/get?key1=value1&key2=value2")
- print(r.text) # 获取文本
- print(r.url) # URL
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。