当前位置: 首页 > 技术教程

Python中的requests库如何使用?

  requests是Python中最流行的HTTP库之一,它简化了发送HTTP请求的过程。通过requests库,开发者可以轻松地发送各种HTTP请求(如GET、POST、PUT、DELETE等),处理响应,支持会话管理、重定向、代理、文件上传等功能,是Web开发和API交互中不可或缺的工具。

  一、安装requests库

  首先,确保你已经安装了requests库。如果没有安装,可以通过pip命令轻松安装:

  bashCopy Codepip install requests

  安装完成后,即可在代码中导入并使用该库。

  二、基本用法

  requests库提供了简单易用的API来进行HTTP请求操作。最常见的请求方法包括GET、POST、PUT、DELETE等。以下是几种常见请求的示例:

  1. 发送GET请求

  GET请求用于从服务器获取资源,通常用于浏览器访问网页。

  pythonCopy Codeimport requests

  # 发送GET请求

  response = requests.get('https://httpbin.org/get')

  # 打印响应的状态码

  print(response.status_code)

  # 打印响应的文本内容

  print(response.text)

  # 打印响应的JSON内容(如果响应为JSON格式)

  print(response.json())

  解析:

  status_code: 返回HTTP响应的状态码,如200表示请求成功。

  text: 返回响应的内容,通常是字符串形式。

  json(): 将响应内容解析为JSON格式(如果响应是JSON格式的话)。

  2. 发送POST请求

  POST请求用于向服务器提交数据。常用于表单提交或API数据交互。

  pythonCopy Codeimport requests

  # 要发送的数据(可以是字典、JSON等格式)

  data = {'username': 'john_doe', 'password': '123456'}

  # 发送POST请求

  response = requests.post('https://httpbin.org/post', data=data)

  # 打印响应内容

  print(response.status_code)

  print(response.json())

  解析:

  data: POST请求的表单数据(可以是字典、列表、字符串等)。

  json(): 可以直接解析返回的JSON格式响应。

  3. 发送PUT请求

  PUT请求用于更新资源。类似于POST请求,但通常用于更新现有资源。

  pythonCopy Codeimport requests

  data = {'username': 'john_doe', 'password': 'newpassword123'}

  # 发送PUT请求

  response = requests.put('https://httpbin.org/put', data=data)

  print(response.status_code)

  print(response.json())

  4. 发送DELETE请求

  DELETE请求用于删除服务器上的资源。

  pythonCopy Codeimport requests

  # 发送DELETE请求

  response = requests.delete('https://httpbin.org/delete')

  print(response.status_code)

  print(response.json())

云计算12.png

  三、请求参数与头部设置

  1. 传递URL参数(Query参数)

  GET请求可以在URL中附加参数。你可以通过params参数传递这些查询字符串。

  pythonCopy Codeimport requests

  # 发送带有查询参数的GET请求

  params = {'search': 'python', 'page': 2}

  response = requests.get('https://httpbin.org/get', params=params)

  print(response.url) # 打印最终的URL

  print(response.json()) # 打印返回的JSON数据

  解析:

  params: 将字典类型的查询参数附加到请求URL中。

  2. 自定义请求头(Headers)

  你可以通过headers参数传递自定义请求头信息,通常用于设置User-Agent、Authorization等信息。

  pythonCopy Codeimport requests

  headers = {'User-Agent': 'Mozilla/5.0', 'Authorization': 'Bearer <token>'}

  response = requests.get('https://httpbin.org/headers', headers=headers)

  print(response.json()) # 打印响应的头部信息

  解析:

  headers: 用于设置HTTP请求头,如User-Agent、Content-Type、Authorization等。

  3. 传递JSON数据

  如果要发送JSON数据,可以使用json参数。requests会自动将字典数据转为JSON格式并设置正确的Content-Type头部。

  pythonCopy Codeimport requests

  data = {'name': 'John', 'age': 30}

  # 发送POST请求,传递JSON数据

  response = requests.post('https://httpbin.org/post', json=data)

  print(response.json())

  四、会话管理与Cookie

  requests库还提供了会话管理功能,允许你保持某个会话的状态,跨多个请求保持Cookie、身份验证等信息。

  pythonCopy Codeimport requests

  # 创建一个会话对象

  session = requests.Session()

  # 第一次请求,保存cookie

  response = session.get('https://httpbin.org/cookies/set?name=foo&value=bar')

  print(response.status_code)

  # 第二次请求,带上之前保存的cookie

  response = session.get('https://httpbin.org/cookies')

  print(response.json()) # 查看cookie信息

  解析:

  使用Session对象可以自动管理Cookie和会话信息。

  五、文件上传与下载

  1. 文件上传

  通过files参数,你可以上传文件。在发送POST请求时,通常会使用这个参数。

  pythonCopy Codeimport requests

  # 要上传的文件

  files = {'file': open('example.txt', 'rb')}

  # 发送文件上传请求

  response = requests.post('https://httpbin.org/post', files=files)

  print(response.json())

  2. 文件下载

  你可以使用requests下载文件,并将文件内容写入本地。

  pythonCopy Codeimport requests

  url = 'https://www.example.com/somefile.zip'

  # 发送GET请求下载文件

  response = requests.get(url, stream=True)

  # 保存文件到本地

  with open('downloaded_file.zip', 'wb') as f:

  for chunk in response.iter_content(chunk_size=1024):

  if chunk:

  f.write(chunk)

  print("文件下载完成")

  解析:

  stream=True: 使得响应体以流的方式处理,适用于大文件下载。

  iter_content(): 按块读取文件内容。

  六、错误处理与调试

  1. 错误处理

  在发送请求时,你可能遇到一些网络问题或服务器错误。requests提供了异常处理机制,常用的异常类包括:

  requests.exceptions.RequestException: 基类,所有请求异常的基类。

  requests.exceptions.HTTPError: HTTP响应错误。

  requests.exceptions.Timeout: 请求超时。

  requests.exceptions.ConnectionError: 网络连接错误。

  pythonCopy Codeimport requests

  try:

  response = requests.get('https://httpbin.org/status/404')

  response.raise_for_status() # 如果响应状态码不是2xx,会抛出HTTPError

  except requests.exceptions.HTTPError as err:

  print(f"HTTP错误: {err}")

  except requests.exceptions.RequestException as err:

  print(f"请求错误: {err}")

  2. 调试请求

  你可以使用requests的response对象获取更详细的调试信息,例如响应头、请求体等。

  pythonCopy Codeimport requests

  response = requests.get('https://httpbin.org/get')

  print(f"请求URL: {response.url}")

  print(f"请求头: {response.request.headers}")

  print(f"响应头: {response.headers}")

  print(f"响应文本: {response.text}")

  requests库提供了简单且强大的功能,使得Python开发者能够轻松地进行HTTP请求。通过掌握基本的GET、POST请求的使用方法,结合会话管理、文件上传下载、错误处理等技巧,可以应对绝大多数的网络请求需求。希望本篇文章能帮助你快速上手并高效使用requests库进行Web请求。

 


猜你喜欢