在本教程中,我们将了解 Python requests
模块,或者如何使用 Python 请求库处理请求。requests
模块是 Python 中发出 HTTP 请求的标准方式。我们还将讨论请求的特征。最后,我们将学习如何针对不同情况优化和定制这些功能。
本教程包括以下主题。
- 介绍
- Python
requests
模块 - 获取请求
- 开机自检请求
- 状态代码
- JSON 回应
- 请求标题
- 消息正文
- 其他重要的 HTTP 方法
- 结论
让我们了解一下请求库的基本介绍。
介绍
一般来说,我们从网站上寻找一些信息。或者我们可能想进入社交媒体账户,查看邮件,观看在线视频。我们可能使用 web 浏览器发送请求,web 服务器从 web 服务器返回所需的结果。从网上获取信息,需要通过网页浏览器发送请求。
例如- 我们在谷歌上搜索 Python 教程。然后请求者向谷歌服务器发送一个 HTTP 请求,服务器返回带有状态码的搜索结果。
启动通信有两个主要组件——客户端和服务器。我们使用超文本传输协议(HTTP),这使得客户端和服务器之间能够通过互联网进行通信。
Python 提供了requests
模块,允许我们使用 Python 脚本发出这些请求。
Python requests
模块
它是 Python 中最强大的工具,允许我们在网络上发送请求。它包括许多发送 HTTP 请求的特性和方法。发送请求的系统被称为客户端,持有 web 服务器的系统被称为服务器。
在处理请求时,我们会遇到以下方法。
- GET - 用于向服务器请求数据。
- POST - 用于向服务器提交一些数据进行处理。
Python requests
模块由许多简单的 API 组成,有助于处理这些请求。这些 API 有许多功能,如添加标题、发送自定义标题、用网址传递参数等。
要开始处理请求,第一步是使用以下命令在 Python 中安装requests
模块。
pip install requests
或者
我们也可以使用 Pipenv (Python 打包工具)来安装requests
模块。键入以下命令。
pipenv install requests
导入文件中的 requests 模块,检查它是否安装成功。
import requests
现在,我们准备开始学习 Python 请求的旅程。
获取请求
GET 和 POST 方法决定了用户在网页上的操作。GET 是 Python requests
模块中最通用的方法之一。它指定用户正试图从指定的资源中检索数据。换句话说,它用于向一个网址发送请求。要调用 GET 请求,我们使用以下语法。
requests.get(url, param = {key:value}, args)
在上面的方法中, url *参数是用户发送请求的特定网站的 url。 param 参数用于发送字典中的查询字符串, 参数* 是多个命名参数之一。
当获取请求成功发送后,该方法将返回一个请求。响应对象。此对象保存从服务器收到的响应。我们可以在变量中分配 get()** 请求结果。
此对象保存从服务器收到的响应。因此,我们可以将 get() 请求结果赋给一个变量。
发出获取请求
使用requests
模块发出 HTTP 请求是一种非常简单的方法。下面是发出请求的代码。
这里,响应对象将存储信息。以下是基本属性。
- 内容- 返回响应的数据内容。
- 状态码- 返回我们请求的状态。例如- 200 OK 表示您成功请求,404 NOT FOUND 表示未找到资源。
- CookieJar-它用来获取一个 CookieJar 对象,该对象拥有我们从服务器获得的所有 CookieJar。
示例-
import requests
req = requests.get('http://www.javatpoint.com/')
print(req.encoding) # returns 'utf-8'
print(req.status_code) # returns 200
print(req.elapsed) # returns datetime.timedelta(0, 1, 666890)
print(req.url) # returns 'https://edureka.co/'
print(req.history)
print(req.headers['Content-Type'])
输出:
ISO-8859-1
200
0:00:01.007097
https://www.javatpoint.com/
[]
text/html;charset=ISO-8859-1
开机自检请求
POST 方法用于使用 post() 方法发送信息。基本语法如下。
语法
requests.post(url,数据={key: value},json={key: value},args)
以下是重要的参数。
- url-URL 是一个强制参数,它指示我们想要向其发送一些数据的 URL。
- 数据- 它指定了我们要发送到 URL 的字典、文件对象或元组。这是一个可选参数。
- json - 这是要发送到 URL 的 json 对象。
开机自检方法返回请求。响应对象。
状态代码
状态代码是我们在发出 get 或 POST 请求后得到的响应。状态代码通知我们请求的状态。
有许多状态代码可用于响应。例如,当我们的请求成功时,状态代码将是 200 或 201,404 状态代码是错误的请求或我们正在寻找的页面没有找到。
我们也可以使用这些信息在我们的代码中做出决定。
if response.status_code == 200:
print('Success!')
elif response.status_code == 404:
print('Not Found.')
如果状态码为 200,则打印成功,如果结果为 404,则程序打印未找到。
有一点永远不要忘记,这种方法不会验证状态代码是否等于 200。这是因为 200 到 400 范围内的其他状态代码,如 204 NO CONTENT,在某种意义上也被认为是成功的。
例如-204 将指示请求成功,但是消息正文中没有要返回的内容。
JSON 回应
JSON 代表 JavaScript 对象符号,这是一种最流行的数据格式传输方式。网页浏览器很容易读取 JSON 数据。数据以字典形式(键、值对)存储。
如何将 JSON 转换成 Python 字典?
我们使用 r.json()方法从 json 响应中创建一个 Python 字典。让我们看看下面的例子。
示例-
import requests
json_data = {'username':'mathew','password':'1234'}
r = requests.post('https://httpbin.org/post',data = json_data)
print(r.json())
输出:
{'args': {}, 'data': '', 'files': {}, 'form': {'password': '1234', 'username': 'mathew'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Content-Length': '29', 'Content-Type': 'application/x-www-form-urlencoded', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.25.1', 'X-Amzn-Trace-Id': 'Root=1-60b711e8-60f535db7df2f6a61f710e29'}, 'json': None, 'origin': '132.154.100.245', 'url': 'https://httpbin.org/post'}
存储在变量中
JSON 数据可以转换成 Python 字典,也可以存储在变量中。让我们理解下面的例子。
示例-
import requests
json_data = {'username':'mathew','password':'1234'}
r = requests.post('https://httpbin.org/post',data = json_data)
r_dictionary= r.json()
print(r_dictionary['form'])
输出:
{'password': '1234', 'username': 'mathew'}
请求标题
我们可以使用 get() 方法创建一个自定义标题。使用 headers 参数在 get() 中传递 HTTP 头的字典。
让我们理解下面的例子。
示例-
import requests
response = requests.get(
'https://api.github.com/search/repositories',
params={'q': 'requests+language:python'},
headers={'Accept': 'application/vnd.github.v3.text-match+json'},
)
json_result = response.json()
repo = json_result['items'][0]
print(f'Text matches: {repo["text_matches"]}')
输出:
Text matches: [{'object_url': 'https://api.github.com/repositories/4290214', 'object_type': 'Repository', 'property': 'description', 'fragment': 'Requests + Gevent = <3', 'matches': [{'text': 'Requests', 'indices': [0, 8]}]}]
解释-
在上面的代码中,accept头是应用可以处理的内容类型。例如,我们使用了头值应用/vnd.github.v3.text-match+json、专有的 GitHub Accept 头。标题的内容是 JSON 格式的。
其他重要的 HTTP 方法
除了 GET 和 POST 方法之外,HTTP 中很少有基本的方法,包括 PUT、DELETE、HEAD、PATCH 和 OPTIONS。这些方法用于创建、读取、更新和删除(或 CRUD)操作。下面是 HTTP 方法的汇总表。
| HTTP 方法 | create, read, update, and delete | 整个集合 | 特定的物品 | | 邮政 | 创造 | 它显示了带有链接客户 id 的位置标题上的 201(已创建)。 | 如果资源已经存在,它显示 404(未找到)。 | | GETRead | 它显示 200,客户列表,分页 | 404、如果标识未找到或无效。 | | 放 | 更新 | 它显示 405,除非我们想替换所有资源。 | 404、如果标识未找到或无效。 | | 修补 | 更新 | 它显示 405,除非我们想修改整个集合本身。 | 404、如果标识未找到或无效。 | | 删除 | 删除 | 它显示 405,除非我们想删除整个集合。 | 404、如果标识未找到或无效。 |
消息正文
消息正文用于传递数据,而不是查询字符串中的参数。这些数据通过 POST、PUT 和不太常见的补丁传递。数据可以是字典、元组列表、字节或类似文件的对象。使用请求,您将把有效负载传递给相应函数的数据参数。
如果请求内容类型为application/x-www-form-URL encoded,数据将在字典中发送。
requests.post('https://httpbin.org/post', data={'key':'value'})
我们也可以使用元组列表发送相同的数据。
requests.post('https://httpbin.org/post', data=[('key', 'value')])
结论
我们已经讨论了 Python requests
模块的基本细节,这将非常有助于进行基本的服务器请求。
要点是 get() 方法不如 post() 方法安全,因为请求只能通过 URL 传递。因此,敏感密码可能被黑客攻破。
我们还提到了重要的 HTTP 方法,以及我们如何使用自定义头发送请求。如果您想了解requests
模块的更多信息,您可以访问其编写良好的 请求文档 。