Python 网络请求库 requests 的十个基本用法

开发 后端 网络
无论你是想抓取网页数据还是测试API接口,requests都能派上大用场。下面我们就一起来看看如何使用requests完成一些常见的任务。

大家好!今天我们要聊聊Python中非常实用的一个库——requests。这个库让发送HTTP请求变得超级简单。无论你是想抓取网页数据还是测试API接口,requests都能派上大用场。下面我们就一起来看看如何使用requests完成一些常见的任务。

引言

随着互联网技术的发展,HTTP请求成为开发者们日常工作中不可或缺的一部分。Python语言以其简洁易用的特点,成为众多开发者首选的编程语言之一。而requests库作为Python中最受欢迎的HTTP客户端库之一,更是大大简化了发送HTTP请求的过程。本文将详细介绍如何利用requests库执行各种类型的HTTP请求,从基础的GET请求到复杂的认证、文件上传等高级功能。

发送GET请求

首先,你需要安装requests库。打开命令行工具,输入以下命令:

pip install requests

安装完成后,就可以开始使用了。最简单的GET请求如下:

import requests

# 发送GET请求
response = requests.get('https://api.github.com')

# 输出响应的内容
print(response.text)

这里的response.text会打印出响应的内容。如果你想获取特定信息,可以解析返回的数据。比如,如果返回的是JSON格式的数据,可以用response.json()方法将其转换为Python字典。

获取页面的二进制数据

有时候我们需要获取图片或文件等二进制数据,这时可以使用requests.get方法并指定stream=True来实现。

response = requests.get('https://example.com/image.jpg', stream=True)

if not response.ok:
    print("Something went wrong")
else:
    # 将数据保存到本地
    with open('image.jpg', 'wb') as f:
        for chunk in response.iter_content(chunk_size=1024):
            if chunk:
                f.write(chunk)

这段代码会将图片下载到当前目录下。

添加查询参数

很多时候,我们需要向URL添加查询参数。这可以通过传递一个字典给params参数来实现:

payload = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://httpbin.org/get', params=payload)

print(response.url)  # 输出: https://httpbin.org/get?key1=value1&key2=value2

这里httpbin.org是一个测试HTTP请求的好地方。

发送POST请求

发送POST请求也很简单,只需要调用requests.post方法,并传入要发送的数据即可:

data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://httpbin.org/post', data=data)

print(response.text)  # 输出POST请求的内容

处理JSON数据

当服务器返回JSON格式的数据时,我们可以直接使用response.json()来解析它:

response = requests.get('https://api.github.com/events')
json_response = response.json()

for event in json_response:
    print(event['type'])

这段代码会打印出GitHub API返回的所有事件类型。

设置自定义Header

如果你需要设置HTTP头部信息,可以通过headers参数来实现:

headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get('https://www.example.com', headers=headers)

print(response.text[:100])  # 打印前100个字符

设置User-Agent可以帮助我们模拟浏览器行为。

发送带认证信息的请求

有时我们需要访问需要认证的网站或API。requests库提供了多种认证方式,包括基本认证(Basic Auth)和OAuth等。下面我们来看一个基本认证的例子:

from requests.auth import HTTPBasicAuth

auth = HTTPBasicAuth('username', 'password')
response = requests.get('https://api.example.com/secure', auth=auth)

print(response.text)

在这个例子中,我们使用了HTTPBasicAuth类来提供用户名和密码进行认证。

发送带有表单数据的请求

当我们需要提交表单数据时,可以使用requests.post方法,并通过data参数传递字典形式的数据:

data = {'name': 'John Doe', 'email': 'john@example.com'}
response = requests.post('https://example.com/submit', data=data)

print(response.text)

这段代码会发送包含名字和邮箱的POST请求。

发送带有文件的请求

在上传文件时,可以使用requests.post方法,并通过files参数传递文件对象:

files = {'file': open('example.txt', 'rb')}
response = requests.post('https://example.com/upload', files=files)

print(response.text)

这段代码会上传名为example.txt的文件到服务器。

处理重定向和超时

在处理网络请求时,我们可能会遇到重定向和超时问题。requests库提供了相应的参数来处理这些问题。

处理重定向:

# 默认情况下,requests会自动处理重定向
response = requests.get('http://github.com', allow_redirects=False)

print(response.status_code)  # 输出: 301 (表示重定向)
print(response.headers['location'])  # 输出: https://github.com/

如果不需要自动重定向,可以设置allow_redirects=False。

处理超时:

try:
    response = requests.get('https://www.example.com', timeout=5)  # 超时时间为5秒
except requests.exceptions.Timeout:
    print("The request timed out")
else:
    print(response.text)

这段代码设置了请求的超时时间为5秒,如果超过这个时间没有响应,则会抛出Timeout异常。

实战案例:获取天气信息

假设我们需要获取某个城市的天气信息,可以使用OpenWeatherMap提供的API来实现。以下是具体的步骤:

  • 1注册一个OpenWeatherMap账户并获取API密钥。
  • 使用requests库发送GET请求获取天气数据。

下面是完整的代码示例:

import requests

# API密钥
api_key = 'your_api_key_here'
city = 'Beijing'

# 构建请求URL
url = f'http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}'

# 发送GET请求
response = requests.get(url)

# 检查响应状态码
if response.status_code == 200:
    data = response.json()
    temperature = data['main']['temp']
    description = data['weather'][0]['description']
    print(f"Temperature in {city}: {temperature} K")
    print(f"Weather description: {description}")
else:
    print("Failed to get weather data")

在这段代码中,我们使用了requests.get方法发送GET请求,并通过response.json()方法解析返回的JSON数据。然后,我们提取了温度和天气描述信息并打印出来。

总结

本文介绍了如何使用requests库执行各种类型的HTTP请求,包括发送GET/POST请求、处理JSON数据、设置自定义Header、发送带认证信息的请求、上传文件、处理重定向和超时等问题。通过实战案例展示了如何利用requests获取天气信息,希望这些知识能够帮助你在实际开发过程中更加高效地处理HTTP请求。

责任编辑:赵宁宁 来源: 小白PythonAI编程
相关推荐

2024-04-28 10:00:24

Python数据可视化库图像处理库

2023-06-27 15:50:23

Python图像处理

2022-02-09 14:50:26

病毒安全策略网络攻击

2024-02-01 12:53:00

PandasPython数据

2023-10-07 11:36:15

2017-03-10 10:16:37

PythonRequests库

2019-09-25 09:20:33

机器学习Python数据科学

2012-11-23 10:30:28

Responsive响应式Web

2024-10-07 11:02:08

requests编程PythonAI

2024-02-20 14:25:39

Python数据分析

2024-01-30 00:36:41

Python机器学习

2024-10-15 10:40:09

2024-09-14 09:26:17

Python网络编程

2023-02-14 08:10:14

Python人工智能XAI

2024-12-03 14:33:42

Python递归编程

2022-04-24 10:12:25

Python软件包代码

2024-05-28 14:36:00

Python开发

2023-03-27 23:37:21

2023-09-12 06:55:27

2010-09-17 13:49:09

点赞
收藏

51CTO技术栈公众号