如何使用aiohttp库进行异步POST请求,同时支持applicationjson和applicationx-www-form-urlencoded格式?

2026-05-28 18:562阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计343个文字,预计阅读时间需要2分钟。

如何使用aiohttp库进行异步POST请求,同时支持application/json和application/x-www-form-urlencoded格式?

前言:使用aiohttp发送POST请求,常见的body类型及示例:

- application/json- application/x-www-form-urlencoded- application/json

POST请求接口示例,Content-Type类型为application/json:POST /api/v1/login/ HTTP/1.1AcContent-Type: application/json

{ username: user123, password: pass123}

前言

aio127.0.0.1:8000') as session:
body = {
"password": "123456",
"username": "test"
}
async with session.post('/api/v1/login', json=body) as resp:
print(resp.url)
print(await resp.text())


loop = asyncio.get_event_loop()
loop.run_until_complete(main())

运行结果

127.0.0.1:8000/api/v1/login
{"code": 0, "msg": "login success!", "username": "test", "token": "ff7b608ed22407a4cd4d2f7beb1bfe9015574bdc"}

默认情况下,会话使用 python 的标准json模块进行序列化。但可以使用不同的 serializer.

ClientSession接受json_serialize 参数:

import ujson

async with aio127.0.0.1:8000') as session:
body = {
"password": "123456",
"username": "test"
}
async with session.post('/api/v4/login', data=body) as resp:
print(await resp.json())


loop = asyncio.get_event_loop()
loop.run_until_complete(main())

运行结果

{'code': 0, 'msg': 'login success!', 'username': 'test', 'token': '408434b72328ea6740f7f2c260a1c3f97be82fab'}

总结

如果要发送未进行表单编码的数据,可以通过传递 bytes 默认情况下内容类型设置为 'application/octet-stream':

async with session.post(url, data=b'\x00Binary-data\x00') as resp:
...

如果要发送 JSON 数据:

async with session.post(url, json={'example': 'test'}) as resp:
...

要发送具有适当内容类型的文本,只需使用data参数

async with session.post(url, data='Тест') as resp:
...




如何使用aiohttp库进行异步POST请求,同时支持application/json和application/x-www-form-urlencoded格式?

本文共计343个文字,预计阅读时间需要2分钟。

如何使用aiohttp库进行异步POST请求,同时支持application/json和application/x-www-form-urlencoded格式?

前言:使用aiohttp发送POST请求,常见的body类型及示例:

- application/json- application/x-www-form-urlencoded- application/json

POST请求接口示例,Content-Type类型为application/json:POST /api/v1/login/ HTTP/1.1AcContent-Type: application/json

{ username: user123, password: pass123}

前言

aio127.0.0.1:8000') as session:
body = {
"password": "123456",
"username": "test"
}
async with session.post('/api/v1/login', json=body) as resp:
print(resp.url)
print(await resp.text())


loop = asyncio.get_event_loop()
loop.run_until_complete(main())

运行结果

127.0.0.1:8000/api/v1/login
{"code": 0, "msg": "login success!", "username": "test", "token": "ff7b608ed22407a4cd4d2f7beb1bfe9015574bdc"}

默认情况下,会话使用 python 的标准json模块进行序列化。但可以使用不同的 serializer.

ClientSession接受json_serialize 参数:

import ujson

async with aio127.0.0.1:8000') as session:
body = {
"password": "123456",
"username": "test"
}
async with session.post('/api/v4/login', data=body) as resp:
print(await resp.json())


loop = asyncio.get_event_loop()
loop.run_until_complete(main())

运行结果

{'code': 0, 'msg': 'login success!', 'username': 'test', 'token': '408434b72328ea6740f7f2c260a1c3f97be82fab'}

总结

如果要发送未进行表单编码的数据,可以通过传递 bytes 默认情况下内容类型设置为 'application/octet-stream':

async with session.post(url, data=b'\x00Binary-data\x00') as resp:
...

如果要发送 JSON 数据:

async with session.post(url, json={'example': 'test'}) as resp:
...

要发送具有适当内容类型的文本,只需使用data参数

async with session.post(url, data='Тест') as resp:
...




如何使用aiohttp库进行异步POST请求,同时支持application/json和application/x-www-form-urlencoded格式?