
Requests是Python语言编写的一个优雅而简单的HTTP库,基于urllib3构建,采用Apache2 Licensed开源协议。它比Python内置的urllib模块更加方便易用,能够极大地简化HTTP请求操作,完全满足HTTP开发测试需求。
Requests库的主要特点:
pip install requestsimport requests
# 基本GET请求
response = requests.get(' https://www.example.com ')
print(response.status_code) # 打印状态码
print(response.text) # 打印响应内容
# 带参数的GET请求
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get(' https://httpbin.org/get ', params=params)
print(response.url) # 查看实际请求的URLimport requests
# 基本POST请求
data = {'username': 'admin', 'password': '123456'}
response = requests.post(' https://httpbin.org/post ', data=data)
print(response.json())
# 发送JSON数据
json_data = {'key': 'value'}
response = requests.post(' https://httpbin.org/post ', json=json_data)
print(response.json())import requests
# PUT请求
response = requests.put(' https://httpbin.org/put ', data={'key': 'value'})
# DELETE请求
response = requests.delete(' https://httpbin.org/delete ')
# HEAD请求
response = requests.head(' https://httpbin.org/get ')
# OPTIONS请求
response = requests.options(' https://httpbin.org/get ')import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
'Accept-Language': 'en-US,en;q=0.9',
'Referer': ' https://www.google.com/ '
}
response = requests.get(' https://httpbin.org/headers ', headers=headers)
print(response.json())import requests
response = requests.get(' https://httpbin.org/get ')
# 获取响应状态码
print(response.status_code)
# 获取响应头
print(response.headers)
# 获取响应内容为文本
print(response.text)
# 获取响应内容为JSON
print(response.json())
# 获取原始响应内容
print(response.content)
# 获取响应编码
print(response.encoding)import requests
# 获取Cookies
response = requests.get(' https://www.example.com ')
print(response.cookies)
# 发送Cookies
cookies = {'key': 'value'}
response = requests.get(' https://httpbin.org/cookies ', cookies=cookies)
print(response.json())import requests
# 创建会话对象
session = requests.Session()
# 使用会话发送请求
session.get(' https://httpbin.org/cookies/set/sessioncookie/123456789 ')
response = session.get(' https://httpbin.org/cookies ')
print(response.json())import requests
proxies = {
'http': ' http://10.10.1.10:3128 ',
'https': ' http://10.10.1.10:1080 ',
}
response = requests.get(' https://httpbin.org/ip ', proxies=proxies)
print(response.json())import requests
from requests.exceptions import Timeout
try:
response = requests.get(' https://httpbin.org/delay/3 ', timeout=2.5)
print(response.status_code)
except Timeout:
print('请求超时')import requests
files = {'file': open('example.txt', 'rb')}
response = requests.post(' https://httpbin.org/post ', files=files)
print(response.json())import requests
# 禁用SSL证书验证
response = requests.get(' https://example.com ', verify=False)
# 使用自定义证书
response = requests.get(' https://example.com ', cert=('/path/client.cert', '/path/client.key'))import requests
from requests.exceptions import RequestException
try:
response = requests.get(' https://example.com ', timeout=5)
response.raise_for_status() # 如果响应状态码不是200,抛出HTTPError异常
except requests.exceptions.HTTPError as errh:
print(f"HTTP错误: {errh}")
except requests.exceptions.ConnectionError as errc:
print(f"连接错误: {errc}")
except requests.exceptions.Timeout as errt:
print(f"超时错误: {errt}")
except requests.exceptions.RequestException as err:
print(f"其他错误: {err}")import requests
url = ' https://example.com/large-file.zip '
response = requests.get(url, stream=True)
with open('large-file.zip', 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
if chunk:
f.write(chunk)import requests
from tqdm import tqdm
url = ' https://example.com/large-file.zip '
response = requests.get(url, stream=True)
total_size = int(response.headers.get('content-length', 0))
block_size = 1024 # 1KB
progress_bar = tqdm(total=total_size, unit='iB', unit_scale=True)
with open('large-file.zip', 'wb') as f:
for data in response.iter_content(block_size):
progress_bar.update(len(data))
f.write(data)
progress_bar.close()import requests
from requests.auth import HTTPBasicAuth
# 基本认证
response = requests.get(' https://api.example.com/data ',
auth=HTTPBasicAuth('username', 'password'))
# 或简写为
response = requests.get(' https://api.example.com/data ',
auth=('username', 'password'))import requests
# 下载图片
response = requests.get(' https://www.python.org/static/img/python-logo.png ')
# 保存二进制数据
with open('python-logo.png', 'wb') as f:
f.write(response.content)import requests
# 使用连接池
session = requests.Session()
adapter = requests.adapters.HTTPAdapter(
pool_connections=10,
pool_maxsize=10,
max_retries=3
)
session.mount(' http://', adapter)
session.mount(' https://', adapter)
response = session.get(' https://example.com ')import requests
def get_github_user(username):
url = f' https://api.github.com/users/ {username}'
response = requests.get(url)
if response.status_code == 200:
return response.json()
else:
return None
user_data = get_github_user('octocat')
print(user_data)import requests
from bs4 import BeautifulSoup
def scrape_website(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 提取所有链接
links = [a['href'] for a in soup.find_all('a', href=True)]
return links
links = scrape_website(' https://www.python.org ')
print(links[:5]) # 打印前5个链接Requests库是Python中最受欢迎的HTTP客户端库之一,它提供了简洁而强大的API来处理HTTP请求。本文介绍了Requests库的基本用法和高级功能,包括各种HTTP方法的使用、请求头和Cookies的处理、会话维持、代理设置、文件上传等。掌握这些知识后将能够轻松地在Python项目中处理各种HTTP请求场景。
“无他,惟手熟尔”!有需要的用起来。
如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!😊
本文分享自 Nicholas与Pypi 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!