> 文章列表 > python教程requests详解

python教程requests详解

python教程requests详解

文章目录

  • 介绍
  • 发送HTTP请求
    • GET请求
    • POST请求
    • PUT请求
    • DELETE请求
  • 处理响应
    • 响应状态代码
    • 响应头
    • 响应正文
  • 处理异常
    • 请求异常
    • 连接异常
    • 超时异常
  • 结论
  • 会话管理
  • 文件上传
  • 代理
  • Cookie
  • SSL验证
  • 超时设置
    • 异常处理
  • 总结
  • 参考文献

作者:爱吃熊掌的鱼

csdn博客:爱吃熊掌的鱼的博客_CSDN博客

介绍

在进行网络开发或者爬虫开发的过程中,一个强大的工具是Python的requests模块。它能够轻松地进行HTTP请求,处理响应以及提取数据。

本文将为您介绍Python requests模块的使用。在本文中,您将学习如何使用Python
requests来发送HTTP请求、处理响应,以及如何处理异常。

发送HTTP请求

发送HTTP请求是请求模块的核心。Python
requests库使用一个名为requests的方法,它允许您发送各种类型的请求,包括GET、POST、PUT、DELETE等。

我们首先从GET请求开始。

GET请求

GET请求是最常见的请求类型。这是因为大多数网站都允许您通过GET请求获取数据,而不需要使用其他类型的请求。

GET请求可以通过以下代码发送:

import requestsresponse = requests.get('http://www.example.com')

以上代码将向http://www.example.com发送一个GET请求,并将响应保存在response变量中。要检查请求是否成功,您可以检查响应的状态代码。

if response.status_code == 200:print('Request successful!')
else:print('Request failed.')

在上面的代码中,我们使用了响应的状态代码。如果状态代码是200,表示请求成功。状态代码的完整列表可以在HTTP协议规范中找到。

在成功获取响应后,您可以使用response对象的content属性访问响应正文。

以下是一个简单的示例:

import requestsresponse = requests.get('http://www.example.com')
if response.status_code == 200:print(response.content)
else:print('Request failed.')

在上面的代码中,我们访问了response对象的content属性,并将响应正文打印到控制台上。

GET请求还可以包含查询参数。

以下是一个包含查询参数的GET请求的示例:

import requestsparams = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('http://www.example.com', params=params)
if response.status_code == 200:print(response.content)
else:print('Request failed.')

在上面的代码中,我们创建了一个名为params的字典,并将其传递给GET请求。这将自动将查询参数添加到请求URL中。

POST请求

POST请求用于向Web服务器发送数据。例如,如果您要在网站上提交表单,您将需要使用POST请求。

以下是一个使用POST请求的示例:

import requestsdata = {'username': 'myusername', 'password': 'mypassword'}
response = requests.post('http://www.example.com/login', data=data)
if response.status_code == 200:print(response.content)
else:print('Request failed.')

在上面的代码中,我们创建了一个名为data的字典,并将其传递给POST请求。这将自动将数据添加到请求正文中。

PUT请求

PUT请求用于向Web服务器发送数据。PUT请求与POST请求类似,但PUT请求用于更新或替换现有误,PUT请求用于更新或替换现有资源,而POST请求则用于创建新资源。以下是一个使用PUT请求的示例:

import requestsdata = {'name': 'newname', 'value': 'newvalue'}
response = requests.put('http://www.example.com/resource', data=data)
if response.status_code == 200:print(response.content)
else:print('Request failed.')

在上面的代码中,我们创建了一个名为data的字典,并将其传递给PUT请求。这将自动将数据添加到请求正文中

DELETE请求

DELETE请求用于从Web服务器删除资源。

以下是一个使用DELETE请求的示例:

import requestsresponse = requests.delete('http://www.example.com/resource')
if response.status_code == 200:print('Resource deleted.')
else:print('Request failed.')

在上面的代码中,我们向http://www.example.com/resource发送了一个DELETE请求,并检查响应的状态代码来确定请求是否成功。

处理响应

在发送HTTP请求后,您将接收到一个HTTP响应。Python requests模块允许您轻松地处理响应,以便提取有用的数据。

响应状态代码

在上面的代码示例中,我们使用了响应对象的status_code属性来确定请求的状态。这是一个HTTP状态代码,指示请求的成功或失败。

以下是HTTP状态代码的常见列表:

  • 200:请求成功。
  • 201:资源已成功创建。
  • 400:请求无效。
  • 401:未经授权的请求。
  • 403:请求被禁止。
  • 404:未找到请求的资源。
  • 500:服务器发生错误。

响应头

在HTTP响应中,响应头是一个包含各种元数据的字典。您可以使用响应对象的headers属性来访问响应头。

以下是一个访问响应头的示例:

import requestsresponse = requests.get('http://www.example.com')
if response.status_code == 200:print(response.headers)
else:print('Request failed.')

在上面的代码中,我们访问了response对象的headers属性,并将响应头打印到控制台上。

响应正文

响应正文是服务器返回的实际数据。您可以使用响应对象的content属性来访问响应正文。

以下是一个访问响应正文的示例:

import requestsresponse = requests.get('http://www.example.com')
if response.status_code == 200:print(response.content)
else:print('Request failed.')

在上面的代码中,我们访问了response对象的content属性,并将响应正文打印到控制台上。

处理异常

在处理HTTP请求和响应时,可能会出现各种异常。Python requests模块允许您轻松地处理这些异常。

请求异常

如果请求失败,可能会出现请求异常。例如,如果请求的URL不存在或服务器无法连接,请求将失败。

以下是一个处理请求异常的示例:

import requeststry:response = requests.get('http://www.example.com')if response.status_code == 200:print(response.content)else:print('Request failed.')
except requests.exceptions.RequestException as e:print('Request failed:', e)

在上面的代码中,我们使用try-except语句捕获任何可能发生的请求异常。如果请求失败,我们将在控制台上打印异常消息。

连接异常

如果请求的URL无效或服务器无法连接,可能会出现连接异常。

以下是一个处理连接异常的示例:

python
import requeststry:response = requests.get('http://www.example.com')if response.status_code == 200:print(response.content)else:print('Request failed.')
except requests.exceptions.ConnectionError as e:print('Connection failed:', e)

在上面的代码中,我们使用try-except语句捕获任何可能发生的连接异常。如果连接失败,我们将在控制台上打印异常消息。

超时异常

如果请求花费的时间超过指定的时间限制,可能会出现超时异常。

以下是一个处理超时异常的示例:

python
import requeststry:response = requests.get('http://www.example.com', timeout=1)if response.status_code == 200:print(response.content)else:print('Request failed.')
except requests.exceptions.Timeout as e:print('Request timed out:', e)

在上面的代码中,我们使用timeout参数指定请求超时时间。如果请求超时,我们将在控制台上打印异常消息。

结论

Python requests模块提供了一种简单而强大的方法来执行HTTP请求和处理响应。在本教程中,我们讨论了如何使用Python
requests模块执行各种类型的HTTP请求,如GET、POST、PUT和DELETE请求。我们还讨论了如何处理HTTP响应,包括响应状态代码、响应头和响应正文。最后,我们还讨论了如何处理HTTP请求和响应中的异常。

如果你已经掌握了上述内容,那么你已经可以在Python中使用requests模块进行基本的HTTP请求了。但是,requests模块还提供了许多其他功能,如会话管理、文件上传、代理、Cookie等。在本节中,我们将讨论一些高级功能。

会话管理

如果您需要执行多个HTTP请求,并希望在这些请求之间共享Cookie和其他信息,那么您可以使用requests模块的Session类来管理会话。

以下是一个使用Session类的示例:

import requestss = requests.Session()# 第一个请求将会话对象保存在CookieJar中
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')# 后续的请求将使用相同的会话对象和CookieJar
response = s.get('http://httpbin.org/cookies')
print(response.text)

在上面的代码中,我们创建了一个Session对象并发送了第一个请求,该请求将会话对象保存在CookieJar中。然后,我们使用相同的Session对象发送另一个请求,以便使用相同的CookieJar。

文件上传

如果您需要上传文件,可以使用requests模块的post方法,并将文件作为参数传递。

以下是一个文件上传的示例:

import requestsurl = 'http://httpbin.org/post'
files = {'file': open('example.txt', 'rb')}response = requests.post(url, files=files)
print(response.text)

在上面的代码中,我们使用post方法向httpbin.org发送一个请求,并将example.txt文件作为参数传递。在httpbin.org中,文件将作为一个名为"file"的键保存在表单数据中。

代理

如果您需要使用代理服务器来发送HTTP请求,您可以使用requests模块的proxies参数来指定代理服务器。

以下是一个使用代理服务器的示例:

import requestsproxies = {'http': 'http://10.10.1.10:3128','https': 'http://10.10.1.10:1080',
}response = requests.get('http://www.example.com', proxies=proxies)
print(response.text)

在上面的代码中,我们使用proxies参数指定了HTTP和HTTPS代理服务器。我们向http://www.example.com发送一个请求,并在请求中指定了代理服务器。注意,代理服务器地址应该是您自己的代理服务器地址。

Cookie

如果您需要访问和管理Cookie,可以使用requests模块的cookies属性。

以下是一个处理Cookie的示例:

import requestsresponse = requests.get('http://www.example.com')# 查看响应中的Cookie
print(response.cookies)# 将Cookie保存到字典中
cookies = requests.utils.dict_from_cookiejar(response.cookies)# 将Cookie添加到请求头中
headers = {'Cookie': '; '.join([f'{k}={v}' for k, v in cookies.items()])
}response = requests.get('http://www.example.com', headers=headers)
print(response.text)

在上面的代码中,我们首先发送一个请求,并使用cookies属性查看响应中的Cookie。然后,我们使用requests.utils模块的dict_from_cookiejar方法将Cookie保存到字典中。最后,我们将Cookie添加到请求头中并发送了另一个请求。

SSL验证

默认情况下,requests模块会验证SSL证书。如果您需要禁用SSL验证,可以使用verify参数,并将其设置为False。

以下是一个禁用SSL验证的示例:

import requestsresponse = requests.get('https://www.example.com', verify=False)
print(response.text)

在上面的代码中,我们向https://www.example.com发送了一个请求,并将verify参数设置为False以禁用SSL验证。请注意,禁用SSL验证可能存在安全风险,并不推荐在生产环境中使用。

超时设置

如果您需要设置HTTP请求的超时时间,可以使用timeout参数。timeout参数指定等待响应的时间(以秒为单位),如果在指定的时间内没有响应,请求将被终止。

以下是一个设置超时时间的示例:

import requestsresponse = requests.get('http://www.example.com', timeout=5)
print(response.text)

在上面的代码中,我们向http://www.example.com发送了一个请求,并将timeout参数设置为5秒。如果在5秒内没有响应,请求将被终止。

异常处理

在发送HTTP请求时,可能会遇到各种异常情况,如连接超时、DNS解析失败、HTTP错误等。为了处理这些异常情况,requests模块提供了一些异常类。

以下是一些常见的异常类:

  • requests.exceptions.Timeout:请求超时
  • requests.exceptions.ConnectionError:连接错误
  • requests.exceptions.HTTPError:HTTP错误
  • requests.exceptions.TooManyRedirects:重定向次数过多

以下是一个异常处理的示例:

import requeststry:response = requests.get('http://www.example.com', timeout=0.1)response.raise_for_status()
except requests.exceptions.Timeout:print('请求超时')
except requests.exceptions.HTTPError as err:print(f'HTTP错误:{err}')
except requests.exceptions.ConnectionError:print('连接错误')
except requests.exceptions.TooManyRedirects:print('重定向次数过多')
else:print(response.text)

在上面的代码中,我们使用try-except语句捕获可能发生的异常情况,并在发生异常时输出相应的错误信息。注意,raise_for_status方法可以在发生HTTP错误时抛出异常。

总结

在本教程中,我们介绍了如何在Python中使用requests模块发送HTTP请求。我们讨论了基本的GET和POST请求,以及一些高级功能,如会话管理、文件上传、代理、Cookie、SSL验证、超时设置和异常处理。使用requests模块,您可以轻松地发送HTTP请求并处理HTTP响应。

同时,我们还探讨了如何设置请求头、查询参数和请求体,并解释了如何处理响应头和响应体。最后,我们介绍了一些异常处理技巧,以帮助您处理HTTP请求中可能发生的各种异常情况。

虽然requests模块非常易用,但在实际应用中,您可能会遇到更复杂的HTTP请求场景。在这种情况下,您可能需要了解更多高级功能,如HTTP认证、HTTP长连接、HTTP压缩等。您可以在requests官方文档中找到更多详细信息。

参考文献

  1. requests documentation, https://docs.python-requests.org/en/latest/
  2. HTTP协议入门, https://www.runoob.com/http/http-tutorial.html
  3. HTTP协议详解, https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview

以上就是Python requests模块的教程,希望对您有所帮助!