本文详细介绍了requests教程,包括如何安装和导入requests库,以及如何发送GET和POST请求。文章还涵盖了处理HTTP响应和错误处理的方法,并通过实战案例展示了requests库的实际应用。
在开始使用requests
库之前,首先需要确保它已经被安装在你的Python环境中。requests
是一个非常流行的HTTP库,用于发送网络请求。安装requests
库有多种方法,最简单的方法是使用pip
,这是Python的包管理工具。
安装requests
库的命令如下:
pip install requests
此命令会从Python Package Index (PyPI)下载并安装requests
库。如果你使用的是虚拟环境,请确保在该环境中运行此命令。
安装完成后,就可以在Python脚本中导入并使用requests
库。导入requests
库的方式非常简单,使用import
关键字即可:
import requests
导入requests
后,你就可以使用其中的各种函数来发送HTTP请求,如get
、post
等。
HTTP GET请求用于从服务器获取数据。使用requests
库发送GET请求的基本语法如下:
response = requests.get(url)
其中,url
是你要请求的资源的URL。例如,你可以请求一个网页或API端点。requests.get
函数返回一个Response
对象,该对象包含了服务器的响应信息,如HTTP状态码、响应头和响应体。
发送GET请求时,可以通过参数params
指定需要发送的查询参数。查询参数通常用于过滤或获取特定的数据。例如,假设你有一个API端点,需要根据某个ID获取用户信息,可以通过如下方式发送GET请求:
params = {'id': '12345'} response = requests.get('https://api.example.com/users', params=params)
在这个例子中,params
字典中的键值对将被添加到URL的查询字符串部分。例如,上述代码将发送一个请求到https://api.example.com/users?id=12345
。
HTTP POST请求用于向服务器发送数据以创建、更新或删除资源。使用requests
库发送POST请求的基本格式如下:
response = requests.post(url, data=data)
其中,url
是POST请求的目标URL,data
是一个字典,用于指定要发送的数据。例如,你可以发送一个包含表单数据的POST请求:
data = {'key1': 'value1', 'key2': 'value2'} response = requests.post('https://api.example.com/data', data=data)
在这个例子中,data
中的键值对将被编码为form表单数据,并作为请求体发送到服务器。
除了data
参数外,发送POST请求时还可以使用json
参数来发送JSON格式的数据。JSON数据通常用于API调用中,因为它具有良好的结构和可读性。例如:
json_data = {'key': 'value'} response = requests.post('https://api.example.com/data', json=json_data)
在这个例子中,json_data
中的数据将被编码为JSON格式,并作为请求体发送。
响应状态码可以帮助你了解请求是否成功。它是一个整数,反映了服务器对请求的响应。通常,200表示请求成功,404表示资源未找到,500表示服务器内部错误。你可以通过response.status_code
来获取响应的状态码:
response = requests.get('https://api.example.com/data') print(response.status_code)
响应内容包含了服务器返回的数据。你可以使用response.text
来获取响应的文本内容:
response = requests.get('https://api.example.com/data') print(response.text)
response.text
返回的是字符串形式的数据。如果你发送的请求返回的是JSON数据,则可以使用response.json()
来解析JSON并返回Python字典或列表:
response = requests.get('https://api.example.com/data') data = response.json() print(data)
response.json()
方法将返回的数据从JSON格式转换为Python字典或列表。
如果请求返回的是JSON数据,可以使用response.json()
来解析JSON并返回Python字典或列表:
response = requests.get('https://api.example.com/data') data = response.json() print(data)
在使用requests
发送请求时,可能会遇到各种异常情况,例如网络连接失败、超时、服务器错误等。为了确保程序的健壮性,可以使用try-except
语句来捕获并处理这些异常:
import requests try: response = requests.get('https://api.example.com/data') response.raise_for_status() # 对于非200响应,抛出异常 except requests.exceptions.HTTPError as errh: print("HTTP Error:", errh) except requests.exceptions.ConnectionError as errc: print("Error Connecting:", errc) except requests.exceptions.Timeout as errt: print("Timeout Error:", errt) except requests.exceptions.RequestException as err: print("Error:", err)
在这个例子中,raise_for_status()
方法会在响应状态码不是200时抛出一个异常。try-except
块捕获了不同类型的异常,并根据异常类型采取相应的处理措施。
requests.exceptions.HTTPError
: 当响应状态码不是200时抛出。可以通过检查response.status_code
来确认错误。requests.exceptions.ConnectionError
: 当请求连接失败时抛出。这可能是由于网络问题或服务器不可达。requests.exceptions.Timeout
: 当请求超时时抛出。可以尝试增加超时时间,或者检查服务器响应时间。requests.exceptions.RequestException
: 当发生其他请求异常时抛出,例如地址格式错误。为了解决这些错误,可以调整请求参数、检查网络连接,或增加超时时间等。
这里给出一个简单的案例,使用requests
库获取网页内容并打印出来:
import requests url = 'https://www.example.com' response = requests.get(url) if response.status_code == 200: print(response.text) else: print(f"Failed to retrieve content, status code: {response.status_code}")
在这个例子中,程序会发送一个GET请求到https://www.example.com
,并检查响应状态码是否为200。如果是200,将打印出网页内容;否则,打印失败信息和状态码。
另一个常见的用例是在网页表单中提交数据。这里给出一个示例,使用requests
库提交表单数据:
import requests url = 'https://www.example.com/login' data = {'username': 'user123', 'password': 'password123'} response = requests.post(url, data=data) if response.status_code == 200: print("Form submission successful") else: print(f"Failed to submit form, status code: {response.status_code}")
在这个例子中,程序会发送一个POST请求到https://www.example.com/login
,并传递表单数据。同样,程序会检查响应状态码是否为200,以确认表单提交是否成功。
通过以上介绍和示例,你应该已经掌握了requests
库的基本用法,可以从简单的GET请求到复杂的POST请求,再到处理响应和异常,都可以轻松应对。