$ pip install aiohttp
为了加快客户端 API 的 DNS 解析速度,您也可以安装 aiodns。 强烈建议使用此选项:
$ pip install aiodns
客户端示例
import aiohttp
import asyncio
async def main():
async with aiohttp.ClientSession() as session:
async with session.get('http://python.org') as response:
print("Status:", response.status)
print("Content-type:", response.headers['content-type'])
html = await response.text()
print("Body:", html[:15], "...")
asyncio.run(main())
这将打印:
Status: 200
Content-type: text/html; charset=utf-8
Body: <!doctype html> ...
服务器示例:
from aiohttp import web
async def handle(request):
name = request.match_info.get('name', "Anonymous")
text = "Hello, " + name
return web.Response(text=text)
app = web.Application()
app.add_routes([web.get('/', handle),
web.get('/{name}', handle)])
if __name__ == '__main__':
web.run_app(app)
Client Session
是所有人的心脏和主要切入点 客户端 API 操作。
首先创建会话,使用实例执行 HTTP 请求并启动 WebSocket 连接。
会话包含一个 cookie 存储和连接池,因此 Cookie 和连接在 HTTP 请求之间共享 同一会话。
Custom Request Headers
如果需要将 HTTP 标头添加到请求中,请将它们传递给 headers 参数。
例如,如果要直接指定 content-type:
url = 'http://example.com/image'
payload = b'GIF89a\x01\x00\x01\x00\x00\xff\x00,\x00\x00'
b'\x00\x00\x01\x00\x01\x00\x00\x02\x00;'
headers = {'content-type': 'image/gif'}
await session.post(url,
data=payload,
headers=headers)
您还可以为所有会话请求设置默认标头:
headers={"Authorization": "Basic bG9naW46cGFzcw=="}
async with aiohttp.ClientSession(headers=headers) as session:
async with session.get("http://httpbin.org/headers") as r:
json_body = await r.json()
assert json_body['headers']['Authorization'] == \
'Basic bG9naW46cGFzcw=='
典型的用例是发送 JSON 正文。您可以指定内容类型 直接如上图所示,但使用特殊关键字更方便:json
await session.post(url, json={'example': 'text'})
对于文本/纯文本
await session.post(url, data='Привет, Мир!')
自定义 Cookie
要将您自己的 cookie 发送到服务器,您可以使用构造函数的 cookie 参数:
url = 'http://httpbin.org/cookies'
cookies = {'cookies_are': 'working'}
async with ClientSession(cookies=cookies) as session:
async with session.get(url) as resp:
assert await resp.json() == {
"cookies": {"cookies_are": "working"}}
标签:cookies,AIOHTTP,用法,headers,json,session,async,x00
From: https://www.cnblogs.com/full-stack-linux-new/p/17895136.html