Python - requests库
目录
requests.请求方法(url, params=None, data=None, json=None, headers=None)
• 常见的请求方法: get/post/put/delete
• url: 请求的url地址
• params: 请求查询参数
• data: 表单参数
• json: json参数
• headers: 请求头参数
Get基本使用
# 1. 导包
import requests
# 2.调用get方法
url = "http://www.baidu.com"
response = requests.get(url)
# 3.根据返回的对象查看url
print("url :", response.url)
# 4.查看响应码
print("响应码:", response.status_code)
# 5.查看返回文本
print("返回文本:", response.text)
Get 请求传递参数
"""
def get(url, params=None, **kwargs):
目标:
1.访问百度传参:http://www.baidu.com?id=1001
2.访问百度传参:http://www.baidu.com?id=1001,1002
3.访问百度传参:http://www.baidu.com?id=1001&wd=sz
"""
# 1. 导包
import requests
# 2.调用get方法
url = "http://www.baidu.com"
# 2.1 定义参数
# 方式一 url 问号传参:http://www.baidu.com?id=1001
# url = http://www.baidu.com?id=1001
# response = requests.get(url)
# 方式二: url 问号传参:http://www.baidu.com?id=1001,1002
# url = http://www.baidu.com?id=1001,1002
# response = requests.get(url)
# 方式三: 关键字传参:
params = {"id": "1001", "wd": "sz"}
response = requests.get(url, params=params)
# 3.根据返回的对象查看url
print("url :", response.url)
# 4.查看响应码
print("响应码:", response.status_code)
# 5.查看返回文本
print("返回文本:", response.text)
POST请求-自动编码JSON
"""
目标: 演示post请求,自动编码JSON参数
def post(url, data=None, json=None, **kwargs):
"""
import requests
# 2. 请求参数准备
# 2.1 url
url = "http://echo.apipost.cn/get.php"
# 2.2 请求数据
data = {"userid": 1}
#调用post请求
#json: 自动将请求数据编码为json格式
r = requests.post(url, json=json_data)
print(r.status_code)
print(r.text)
输出如下:
200
{
"args": {},
"data": "{\"userid\": 1}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "13",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.26.0",
"X-Amzn-Trace-Id": "Root=1-61cec82f-1c3b5da01e3103d84be8b8b1"
},
"json": {
"userid": 1
},
"origin": "113.110.203.110",
"url": "http://httpbin.org/post"
}
POST请求-手动编码JSON参数
"""
目标: 演示post请求,手动编码JSON参数
def post(url, data=None, json=None, **kwargs):
data: 可选,要发送到请求体中的字典、元组、字节或文件对象
json:可选,要发送到请求中的json数据
"""
import requests
import json
# 2. 请求参数准备
# 2.1 url
url = "http://httpbin.org/post"
# 2.2 指定header中的请求方式为json
header = {"headers": "Application/json"}
# 2.3 请求数据
data = {"userid": 1}
# 3 调用请求
r = requests.post(url, data=json.dumps(data), headers=header)
print(r.status_code)
print(r.text)
输出:
200
{
"args": {},
"data": "{\"userid\": 1}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "13",
"Headers": "Application/json",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.26.0",
"X-Amzn-Trace-Id": "Root=1-61cecb1c-1c710abe2c335b944c4774ed"
},
"json": {
"userid": 1
},
"origin": "113.110.203.110",
"url": "http://httpbin.org/post"
}
POST form 表单形式传参
"""
POST 函数声明: def post(url, data=None, json=None, **kwargs):
目标:
发送POST请求-表单提交:
响应对象 = requests.post(url, data=表单数据的字典格式)
注意:字典类型的数据,在内部自动转换为表单格式
"""
import requests
import json
# 2. 请求参数准备
# 2.1 url
url = "http://httpbin.org/post"
# 2.2 请求数据
data = {"userid": 1}
# 3 调用请求
r = requests.post(url, data=data)
print(r.status_code)
print(r.text)
输出:
200
{
"args": {},
"data": "",
"files": {},
"form": {
"userid": "1"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "8",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.26.0",
"X-Amzn-Trace-Id": "Root=1-61cecc3a-469d97f05f2bab754882fafd"
},
"json": null,
"origin": "113.110.203.110",
"url": "http://httpbin.org/post"
}
POST 请求.json() 和.text的区别
response.json():返回的是dict对象,可以通过key 获得value
response.text: 返回的是字符串对象,不能通过key获得value
response 对象
encoding 和 headers 属性
import requests
url = "http://www.baidu.com"
r = requests.get(url)
"""
encodeing:
1. 如果返回头没有指定编码方式,采用默认的ISO-8859-1
2. 此时如果调用text中文乱码,则可以用response.encoding 手动指定编码方式
"""
print(r.encoding)
"""
cookie/session 都保存在响应的header信息中
"""
print(r.headers)
关于编码方式,可先参考:
https://www.cnblogs.com/bw13/p/6549248.html
cookies 属性
import requests
url = "http://www.baidu.com"
r = requests.get(url)
# 获得服务器响应的cookie头信息, dict_cookies是一个字典对象
dict_cookies = r.cookies
print(dict_cookies) # 输出:<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
print(dict_cookies.get("BDORZ")) # 输出:27315
content 属性
import requests
url = "https://www.baidu.com/img/bd_logo1.png?where=super"
r = requests.get(url)
# 获得响应体的二进制信息
print(type(r.content)) # out: <class 'bytes'>
# 将响应的baidu logo 写入./img/ 目录下
with open("./img/baidu_logo.png", "wb") as f:
f.write(r.content)
session 对象
import requests
# 在每次请求中添加cookies信息比较繁琐,用session可以自动保存并上送
# 在一次session会话中,可以自动保存服务器产生的cookies 信息,并且自动在下一条请求时附加
session = requests.session()
url = 'http://httpbin.org/cookies/set/sessioncookie/123456789'
# 服务器产生cookies
session.get(url)
# 请求服务器,session会自动携带cookies信息到服务器
r = session.get("http://httpbin.org/cookies")
print(r.json()) # out: {'cookies': {'sessioncookie': '123456789'}}
timeout 异常处理
# ** 处理方法一:
# try:
# # timeout=0.1: 连接和读值的时间总和
# # 还有一种写法: timeout=(1,1),连接超时设置为1s,读值超时时间设置为1s
# resp = requests.get('https://www.douban.com', timeout=0.1)
# except ConnectTimeout as e: # 超过设置的连接超时时间后会报ConnectTimeout
# print('连接超时')
# except ReadTimeout as e: # 超过设置的连接超时时间后会报ReadTimeout
# print('读值超时',e)
# ** 处理方法二:
try:
resp = requests.get('https://www.douban.com', timeout=0.1)
except RequestException as e:
print(sys.exc_info()[0]) # 获取最近发生异常的对象:<class 'requests.exceptions.ReadTimeout'>
print('请求失败:', e) # 请求失败: HTTPSConnectionPool(host='www.douban.com', port=443): Read timed out. (read timeout=0.1)
RequestException 是 ConnectTimeout & ReadTimeout 的父类直接写一个即可
ReadTimeout 体系:
ConnectTimeout 体系:
stream=True
相关资料:
reuqests 库官方文档
免费测试接口: http://httpbin.org/
本文来自博客园,作者:chuangzhou,转载请注明原文链接:https://www.cnblogs.com/czzz/p/15751055.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!