Python请求模块 – HTTP请求

Python请求模块 – HTTP请求

在本教程中,我们将学习如何使用Python请求库处理请求,即Python请求模块。请求模块是使用Python进行HTTP请求的标准方式。我们还将讨论请求的特性。最后,我们将学习如何优化和定制这些特性以适应不同的情况。

本教程包括以下主题。

  • 介绍
  • Python请求模块
  • GET请求
  • POST请求
  • 状态码
  • JSON响应
  • 请求头
  • 消息体
  • 其他重要的HTTP方法
  • 结论

让我们了解请求库的基本介绍。

介绍

通常,我们会从网站上寻找一些信息。或者我们可能想要访问社交媒体帐户、查看邮件、观看在线视频。我们通常使用Web浏览器发送请求,Web服务器会从Web服务器返回所需的结果。为了从互联网获取信息,我们需要通过Web浏览器发送 请求

例如- 我们在Google上搜索Python教程。然后请求向Google服务器发送一个HTTP请求,服务器返回带有状态码的搜索结果。

在进行通信时有两个主要组成部分-客户端和服务器。我们使用HTTP(超文本传输协议)在客户端和服务器之间进行通信。

Python提供了requests模块,可以通过Python脚本发送这些请求。

Python请求模块

这是Python中最强大的工具,允许我们在Web上发送请求。它包含许多功能和方法以发送HTTP请求。发送请求的系统称为客户端,保持Web服务器的系统称为服务器。

在使用requests时,我们将遇到以下方法。

  • GET- 用于从服务器请求数据。
  • POST- 用于提交一些数据以供服务器处理。

Python请求模块包含许多简单的API,有助于处理这些请求。这些API具有许多功能,例如添加标头、发送自定义标头、通过URL传递参数等。

要开始使用请求,步骤1是使用以下命令在Python中安装请求模块。

pip install requests

或者

我们还可以使用Pipenv(Python包管理工具)来安装request模块。输入以下命令。

pipenv install requests

在文件中导入requests模块以检查它是否成功安装。

import requests

现在,我们准备开始学习Python中的请求。

GET 请求

GET 和 POST 方法确定用户在网页上的操作。GET 是Python requests 模块中最通用的方法之一。它指定用户尝试从指定资源中检索数据。换句话说,它用于向 URL 发送请求。要调用 GET 请求,我们使用以下语法。

requests.get(url, param = {key:value}, args)

在上述方法中, url 参数是用户发送请求的特定网站的URL。 param 参数用于在字典中发送查询字符串,而 args 是多个命名参数之一。

成功发送get请求后,该方法将返回一个 requests.Response 对象。该对象保存从服务器收到的响应。我们可以将 get() 请求的结果分配给变量。

该对象保存从服务器收到的响应。因此,我们可以将 get() 请求的结果分配给变量。

进行GET请求

使用requests模块进行HTTP请求非常简单。以下是进行请求的代码。

在这里,响应对象将存储信息。以下是一些重要的属性。

  • content – 返回响应数据的内容。
  • status_code – 返回请求的状态。例如,”200 OK”表示您发出了成功的请求,”404 NOT FOUND”表示资源未找到。
  • cookies – 用于获取从服务器获取的所有Cookie的 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方法用于使用post()方法发送信息。基本语法如下。

语法

requests.post(url, data={key: value}, json={key: value}, args)

以下是重要的参数。

  • url – url是一个必需的参数,用于指示要向其中发送数据的URL。
  • data – 它指定我们要发送到URL的字典、文件对象或元组。这是一个可选参数。
  • json – 要发送到URL的JSON对象。

POST方法返回requests.Response对象。

状态码

状态码是在进行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 Object Notation,是一种最流行的数据传输格式。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() 方法创建自定义头。HTTP头的字典通过 get() 方法的headers参数传递。

让我们了解以下示例。

示例

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]}]}]

解释 –

在上面的代码中,Accepts头部是应用程序可以处理的内容类型。例如,我们使用了值为”application/vnd.github.v3.text-match+json”的头部,它是一个专有的GitHub Accept头部。头部的内容是JSON格式的。

其他重要的HTTP方法

除了GET和POST方法外,HTTP还有几种重要的方法,包括PUT、DELETE、HEAD、PATCH和OPTIONS。这些方法用于创建、读取、更新和删除(或CRUD)操作。下面是HTTP方法的总结表格。

HTTP Method CRUD Entire Collection Specific Item
POST 创建 它在位置头信息中显示201(已创建),并具有链接客户ID。 如果资源已经存在,则显示404(未找到)。
GET 读取 显示200,客户列表,分页 如果ID未找到或无效,显示404。
PUT 更新 显示405,除非我们想要替换每一个资源。 如果ID未找到或无效,显示404。
PATCH 更新 显示405,除非我们想要修改整个集合本身。 如果ID未找到或无效,显示404。
DELETE 删除 显示405,除非我们想要删除整个集合。 如果ID未找到或无效,显示404。

邮件正文

邮件正文用于在查询字符串中传递数据而不是参数。这些数据通过POST、PUT和不常见的patch传递。数据可以是字典、元组列表、字节或类似文件的对象。使用requests,您将将有效负载传递给相应函数的数据参数。

如果请求的内容类型是 application/x-www-form-urlencoded ,数据将以字典形式发送。

requests.post('https://httpbin.org/post', data={'key':'value'})

我们也可以使用元组列表发送相同的数据。

requests.post('https://httpbin.org/post', data=[('key', 'value')])

结论

我们讨论了关于Python请求模块的基本细节,这对于进行基本的服务器请求非常有帮助。

主要观点是 get() 方法比 post() 方法更不安全,因为请求只能通过URL传递。因此,敏感密码可能会被黑客窃取。

我们还提到了重要的HTTP方法以及如何使用自定义头发送请求。如果您想了解更多关于请求模块的信息,可以访问其写得很好的 请求文档

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程