python requests库使用详细教程
Python 中的 requests 库是一个简单易用的 HTTP 请求库,支持多种请求方法、多种参数设置、并且使用广泛。本文将详细介绍如何使用 requests 库发送 HTTP 请求。
安装
使用 pip 命令进行安装:
pip install requests
导入
在编写 Python 代码时,需要首先导入 requests 库:
import requests
发送 GET 请求
GET 是最常见的请求方法之一,它用于从指定的 URL 获取资源。使用 requests.get() 方法可以发送 HTTP GET 请求。
import requests response = requests.get('https://www.baidu.com') print(response.text)
上面的代码向百度首页发送 HTTP GET 请求,并获取到了返回的 HTML 页面的内容。
参数传递
有时需要在 HTTP GET 请求中传递一些参数,以获取指定的资源或执行特殊的操作。因此,在调用 requests.get() 方法时,可以通过 params 参数传递参数。该参数应该是一个字典对象,其中键表示参数名,值表示参数值。
import requests payload = {'key1': 'value1', 'key2': 'value2'} response = requests.get('https://httpbin.org/get', params=payload) print(response.url)
上面的代码向 httplib 的 API 查询字符串中添加了两个参数,将其转换为 URL 的查询部分。
发送 POST 请求
POST 是发送数据最常见的请求方法之一。requests.post() 方法用于发送 HTTP POST 请求。
import requests payload = {'key1': 'value1', 'key2': 'value2'} response = requests.post('https://httpbin.org/post', data=payload) print(response.text)
上面的代码向 httplib 的 API 发送了一个包含两个键值对数据的 HTTP POST 请求,该请求被接收,并返回了 JSON 格式的响应。
更进一步的编码
有时候,需要向HTTP POST 请求发送编码为 application/x-www-form-urlencoded 的表单数据。这时,我们可以将参数作为一个字典对象传递给 data 参数,并设置 Content-Type 为 application/x-www-form-urlencoded。
import requests payload = {'key1': 'value1', 'key2': 'value2'} response = requests.post('https://httpbin.org/post', data=payload, headers={'Content-Type': 'application/x-www-form-urlencoded'}) print(response.text)
发送 JSON 数据
HTTP 协议是基于文本的协议,通常用于发送 HTML 格式的文本、表单数据等。但是,在现代 Web 开发中,JSON 数据被广泛使用,并且成为了 Web API 的标准数据格式。因此, request 库支持使用 JSON 格式发送数据。
import requests import json payload = {'key1': 'value1', 'key2': 'value2'} response = requests.post('https://httpbin.org/post', json=payload) print(json.loads(response.text))
上面的代码向 httplib 的 API 发送了一个包含两个键值对数据的 HTTP POST 请求,并使用 JSON 格式进行编码。服务器接收到请求后,将 JSON 数据解码,并返回一个 JSON 格式的响应。
发送 PUT 请求
HTTP PUT 请求用于向指定 URL 更新资源。requests.put() 方法用于发送 HTTP PUT 请求。
import requests payload = {'key1': 'value1', 'key2': 'value2'} response = requests.put('https://httpbin.org/put', data=payload) print(response.text)
上面的代码向 httplib 的 API 发送了一个包含两个键值对数据的 HTTP PUT 请求,该请求被接受,并将其转发到相应的服务器。
发送二进制数据
如果你需要向服务器发送一些二进制数据,比如图片或音频等,可以使用 requests.put() 方法向指定 URL 上传二进制数据。
以下是一个示例:
import requests url = 'https://httpbin.org/put' data = open('file.bin', 'rb').read() response = requests.put(url, data=data) print(response.text)
上面的代码将名为 file.bin 的文件作为二进制数据发送,并将其上传到指定 URL 上。
发送 DELETE 请求
DELETE 请求用于向服务器删除指定资源。requests.delete() 方法用于发送 HTTP DELETE 请求。
import requests response = requests.delete('https://httpbin.org/delete') print(response.text)
上面的代码向 httplib 的 API 发送一个 HTTP DELETE 请求,该请求被接受,并将其转发到相应的服务器。
请求头
HTTP 请求头包含请求信息,如浏览器类型、请求方法、源站信息、缓存信息等。 requests 库允许用户更改默认请求头。
import requests url = 'https://httpbin.org/get' headers = {'user-agent': 'my-app/0.0.1'} response = requests.get(url, headers=headers) print(response.text)
上面的代码向 httplib 的 API 发送一个 HTTP GET 请求,并更改了默认请求头中的 User-Agent 字段。
响应
当服务器响应 HTTP 请求时,它会返回数据和一些元数据。requests 库提供了简单且易于使用的 API 来访问响应内容以及元数据。
响应内容
响应内容是 Python 字符串类型。可以通过该字符串来访问服务器返回的文本内容。
import requests response = requests.get('https://www.baidu.com') print(response.text)
上面的代码从百度首页获取 HTML 页面的内容,并将其打印出来。
响应状态码
HTTP 响应状态码表明请求是否成功,在许多情况下,状态码为 200 表示请求成功。
import requests response = requests.get('https://www.baidu.com') print(response.status_code)
上面的代码从百度首页获取 HTML 页面,并检查其响应状态码。
响应头
HTTP 响应头提供关于响应元数据的信息。可以使用 response.headers 属性访问 HTTP 响应头。
import requests response = requests.get('https://www.baidu.com') print(response.headers)
上面的代码从百度首页获取 HTML 页面,并输出其 HTTP 响应头。
原始响应内容
HTTP 响应的原始内容也可以使用 response.content 属性访问,返回经过解码的字节字符串。
import requests response = requests.get('https://www.baidu.com', stream=True) print(response.content)
上面的代码从百度首页获取 HTML 页面的原始内容,并将其打印出来。
异常处理
在发送 HTTP 请求时,可能会出现一些异常,如网络连接错误、请求超时等。要避免程序因此而崩溃,需要对这些异常进行处理。
import requests try: response = requests.get('http://httpbin.org/get', timeout=0.1) response.raise_for_status() except requests.exceptions.RequestException as e: print(e)
上面的代码向 httplib 的 API 发送一个 HTTP GET 请求,并设置请求超时为 0.1 秒。如果请求失败或超时,将引发 requests.exceptions.RequestException 异常。
高级用法
在请求中传递 Cookies
有时候发送 HTTP 请求时需要通过 Cookies 进行身份验证。requests 库支持从字典对象中设置 Cookies。以下是一个示例:
import requests cookies = {'name': 'value'} response = requests.get('https://httpbin.org/cookies', cookies=cookies) print(response.text)
上面的代码向 httplib 的 API 发送一个 HTTP GET 请求,并传递了一个 Cookies 对象。
会话对象
有时候,当需要向同一个主机发送多次请求时,可以使用 requests.Session() 方法创建一个会话对象。
import requests session = requests.Session() payload = {'key1': 'value1', 'key2': 'value2'} response = session.post('https://httpbin.org/post', data=payload) print(response.text)
上面的代码向 httplib 的 API 发送了两个 HTTP POST 请求,并在第二个请求中添加了 Cookie。默认情况下, requests 库使用不同的连接来处理每个HTTP请求,但是,使用会话对象可以重用与同一主机的所有请求之间的连接,从而提高性能。
SSL 证书验证
requests 库默认情况下验证 SSL 证书。如果需要禁用证书验证,可以将 verify 参数设置为 False。
import requests response = requests.get('https://httpbin.org/', verify=False) print(response.text)
上面的代码向 httplib 的 API 发送了一个 HTTP GET 请求,并禁用了 SSL 证书验证。
结论
通过使用 requests 库,可以轻松地发送 HTTP 请求,并获取服务器的响应。此外,还可以对请求参数、请求头、响应内容、状态码等进行控制和检查。