MIME类型
MIME 即互联网媒体类型,也称作内容类型(Content-Type)。
常用于表示互联网传输内容赋予的分类类型。
Pywss 支持多种数据类型解析。
Byte
Pywss 服务可以通过 ctx.body()
获取原生请求体数据。此方法依赖 Content-Length
读取数据。
- 服务端
- 客户端
import pywss
def handler(ctx: pywss.Context):
assert ctx.body() == b"pywss"
app = pywss.App()
app.post("/byte", handler)
app.run()
import requests
reqoests.post(
"http://localhost:8080/byte",
data="pywss"
)
Json
Pywss 服务可以通过 ctx.json()
获取原生请求体数据,并将其转化为 JSON 类型。
- 服务端
- 客户端
import pywss
def handler(ctx: pywss.Context):
assert ctx.json() == {"name": "pywss"}
app = pywss.App()
app.post("/json", handler)
app.run()
import requests
reqoests.post(
"http://localhost:8080/json",
json={
"name": "pywss",
}
)
Form
Pywss 服务可以通过 ctx.form()
获取原生请求体数据,并将其转化为 FORM 表单类型。
- 服务端
- 客户端
import pywss
def handler(ctx: pywss.Context):
assert ctx.form() == {"name": "pywss"}
app = pywss.App()
app.post("/form", handler)
app.run()
import requests
reqoests.post(
"http://localhost:8080/form",
data={
"name": "pywss",
}
)
File
Pywss 服务可以通过 ctx.file()
获取原生请求体数据,并将其转化为 FILE 类型。
- 服务端
- 客户端
- file.txt
import pywss
def handler(ctx: pywss.Context):
file: pywss.File = ctx.file()["upload-file"]
assert file.name == "upload-file"
assert file.filename == "file.txt"
assert isinstance(file.content, byte)
app = pywss.App()
app.post("/file", handler)
app.run()
pywss.File
class File:
def __init__(self, name, filename, content):
self.name: str = name
self.filename: str = filename
self.content: bytes = content
import requests
reqoests.post(
"http://localhost:8080/file",
files={
"upload-file": open("file.txt", "rb"),
}
)
0036757B8FF4120B5F2344F3886EA2AD
0036757B8FF4120B5F2344F3886EA2AD
0036757B8FF4120B5F2344F3886EA2AD
0036757B8FF4120B5F2344F3886EA2AD
0036757B8FF4120B5F2344F3886EA2AD
0036757B8FF4120B5F2344F3886EA2AD
0036757B8FF4120B5F2344F3886EA2AD
0036757B8FF4120B5F2344F3886EA2AD
0036757B8FF4120B5F2344F3886EA2AD
0036757B8FF4120B5F2344F3886EA2AD
0036757B8FF4120B5F2344F3886EA2AD
Stream
Pywss 服务可以通过 ctx.stream()
流式读取原生请求体数据。这在大数据上传场景下会很有用。
此外,stream 还支持两种读取模块:
- 按指定大小读取数据
- 逐行读取数据
- 服务端-流式读取
- 服务端-逐行读取
- 客户端
- bigfile.txt
import pywss
def handler(ctx: pywss.Context):
for data in ctx.stream(size=32): # 按指定大小读取数据
print(len(data) == 32, data)
app = pywss.App()
app.post("/stream", handler)
app.run()
import pywss
def handler(ctx: pywss.Context):
for data in ctx.stream(readline=True): # 逐行读取数据
print(data)
app = pywss.App()
app.post("/stream", handler)
app.run()
import requests
reqoests.post(
"http://localhost:8080/stream",
data=open("bigfile.txt", "rb")
)
0036757B8FF4120B5F2344F3886EA2AD
0036757B8FF4120B5F2344F3886EA2AD
0036757B8FF4120B5F2344F3886EA2AD
0036757B8FF4120B5F2344F3886EA2AD
0036757B8FF4120B5F2344F3886EA2AD
0036757B8FF4120B5F2344F3886EA2AD
0036757B8FF4120B5F2344F3886EA2AD
0036757B8FF4120B5F2344F3886EA2AD
0036757B8FF4120B5F2344F3886EA2AD
0036757B8FF4120B5F2344F3886EA2AD
0036757B8FF4120B5F2344F3886EA2AD