Requests模块是Python中最简单易用的HTTP客户端库,可以极大简化发送HTTP请求的代码
使用requests.get()
发送GET请求,只需要传入URL即可:
import requests
resp = requests.get('http://example.com/api')
此外还可以传入其他参数,如headers, params等。
发送请求后可以获取Server响应信息:
resp.status_code
: 响应状态码resp.headers
: 响应头部信息resp.text/content
: 响应内容,text为字符串,content为字节resp.json()
: 将JSON响应解析为字典或列表示例:
print(resp.status_code)
print(resp.headers['Content-Type'])
print(resp.json())
使用requests.post()
发送POST请求,传入data
作为POST body:
data = {'key1': 'value1', 'key2': 'value2'}
resp = requests.post(url, data=data)
也可以传入json
参数发送JSON格式的数据:
data = {'key': 'value'}
resp = requests.post(url, json=data)
通过params
参数传递URL查询参数:
params = {'key1': 'value1', 'key2': 'value2'}
resp = requests.get(url, params=params)
这会构造一个如下的URL:
http://example.com?key1=value1&key2=value2
通过headers
参数设置HTTP头部信息:
headers = {'User-Agent': 'MyBrowser'}
resp = requests.get(url, headers=headers)
通过timeout
参数设置超时时长(秒):
resp = requests.get(url, timeout=3) # 设置3秒超时
使用requests.Session()
创建会话对象,用于跨请求保持参数:
s = requests.Session()
s.headers.update({'x-test': 'true'})
resp1 = s.get(url1)
resp2 = s.get(url2)
此外,Requests模块还支持文件上传、连接池、SSL证书验证等高级功能,非常强大!
使用files
参数上传文件:
url = 'http://example.com/upload'
files = {'file': open('report.xls', 'rb')}
r = requests.post(url, files=files)
可以设置文件名、文件对象和MIME类型:
files = {'file': ('report.xls', open('report.xls','rb'), 'application/vnd.ms-excel')}
上传多个文件:
files = {
'file1': ('image.jpg', open('image.jpg','rb'), 'image/jpeg'),
'file2': ('report.xls', open('report.xls','rb'), 'application/vnd.ms-excel')
}
r = requests.post(url, files=files)
使用requests.Session()
创建连接池:
s = requests.Session()
s.get('http://httpbin.org/get')
s.get('http://httpbin.org/get')
自定义连接池:
adapter = HTTPAdapter(pool_connections=100, pool_maxsize=100)
s.mount('http://', adapter)
忽略验证:
r = requests.get(url, verify=False)
使用系统/自定义证书:
r = requests.get(url, verify='/path/to/cert.pem')
使用证书字符串:
cert = '''-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----'''
r = requests.get(url, verify=cert)
以上是对Requests模块文件上传、连接池和SSL证书验证等高级功能的详细介绍。
以上概括了Requests最主要的用法,希望对你有帮助!