首页 > 其他分享 >AIOHTTP用法

AIOHTTP用法

时间:2023-12-11 18:56:48浏览次数:34  
标签:cookies AIOHTTP 用法 headers json session async x00

$ 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"}}

可用于共享 Cookie 在多个请求之间:

async with aiohttp.ClientSession() as session:
    await session.get(
        'http://httpbin.org/cookies/set?my_cookie=my_value')
    filtered = session.cookie_jar.filter_cookies(
        'http://httpbin.org')
    assert filtered['my_cookie'].value == 'my_value'
    async with session.get('http://httpbin.org/cookies') as r:
        json_body = await r.json()
        assert json_body['cookies']['my_cookie'] == 'my_value'

响应标头和 Cookie

我们可以使用 答:

assert resp.headers == {
    'ACCESS-CONTROL-ALLOW-ORIGIN': '*',
    'CONTENT-TYPE': 'application/json',
    'DATE': 'Tue, 15 Jul 2014 16:49:51 GMT',
    'SERVER': 'gunicorn/18.0',
    'CONTENT-LENGTH': '331',
    'CONNECTION': 'keep-alive'}

不过,字典很特别:它是专门为 HTTP 制作的 头。根据 RFC 7230,HTTP 标头名称 不区分大小写。它还支持相同的多个值 键,就像 HTTP 协议一样。

因此,我们可以使用我们想要的任何大小写来访问标头:

assert resp.headers['Content-Type'] == 'application/json'

assert resp.headers.get('content-type') == 'application/json'

所有标头都使用 UTF-8 和 option 从二进制数据转换而来。这在大多数情况下都很好用,但是 如果服务器使用非标准数据,有时需要未转换的数据 编码。虽然从 RFC 7230 的角度来看,这些标头的格式不正确,但可以使用属性检索它们:surrogateescape

assert resp.raw_headers == (
    (b'SERVER', b'nginx'),
    (b'DATE', b'Sat, 09 Jan 2016 20:28:40 GMT'),
    (b'CONTENT-TYPE', b'text/html; charset=utf-8'),
    (b'CONTENT-LENGTH', b'12150'),
    (b'CONNECTION', b'keep-alive'))

如果响应包含一些 HTTP Cookie,您可以快速访问它们:

url = 'http://example.com/some/cookie/setting/url'
async with session.get(url) as resp:
    print(resp.cookies['example_cookie_name'])

 

标签:cookies,AIOHTTP,用法,headers,json,session,async,x00
From: https://www.cnblogs.com/full-stack-linux-new/p/17895136.html

相关文章

  • colorama用法
    colorama是一个python专门用来在控制台、命令行输出彩色文字的模块,可以跨平台使用。1.安装colorama模块pipinstallcolorama 可用格式常数:Fore:BLACK,RED,GREEN,YELLOW,BLUE,MAGENTA,CYAN,WHITE,RESET.Back:BLACK,RED,GREEN,YELLOW,BLUE,MAGENTA,C......
  • C# @的用法(转)
    原文:c#中@的3种作用的详细介绍-C#.Net教程-PHP中文网1.忽略转义字符 2.让字符串跨行3.在标识符中的用法 ......
  • JAVA:mapper.java和mapper.xml的关系,以及foreach的用法
    简单理解就是,java声明了方法,xml实现了方法,类似与接口与实现接口,他们之间的关系如下:// Mapper.java中List<Ranks>inquireOnlyName(@Param("names")List<String>names,@Param("status")Stringstatus,@Param("startIndex&qu......
  • 字符串用法
    数字类型整数类型oct八进制hex十六进制bin二进制浮点数类型isdigit()isdecimal()字符串类型拼接join索引取值正向索引负向索引切片name='dream'#顾头不顾尾print(name[0:3])#[0:end]print(name[:3])#[0:结尾]prin......
  • oracle Parallel模式-Parallel用法(/*+PARALLEL(n)*/)
    一、用途强行启用并行度来执行当前SQL。这个在Oracle9i之后的版本可以使用,之前的版本现在没有环境进行测试。也就是说,加上这个说明,可以强行启用Oracle的多线程处理功能。举例的话,就像电脑装了多核的CPU,但大多情况下都不会完全多核同时启用(2核以上的比较明显),使用parallel说明,就会......
  • screen的用法
    screen是一个非常有用的命令行工具,它可以让你在单个终端窗口中打开、使用、管理和切换多个终端会话。以下是一些常用的screen命令:创建新的screen会话:screen-Smysession这个命令会创建一个名为mysession的新screen会话列出所有的screen会话:screen-ls这个命令......
  • SpringMVC 中ModelAndView用法
    SpringMVC中ModelAndView用法ModelAndView作用1.返回到指定的页面ModelAndView构造方法可以指定返回的页面名称   例:returnnewModelAndView("redirect:/m07.jsp");通过setViewName()方法跳转到指定的页面   例:mav.setViewName("hello"); 2.返回参数到指定页面的request作用......
  • 深入探究 Python 异步编程:利用 asyncio 和 aiohttp 构建高效并发应用
    在现代编程中,异步编程已成为处理高并发和IO密集型任务的重要方式。Python提供了强大的异步编程支持,包括asyncio库和aiohttp等框架。本文将深入探讨异步编程的概念,以及在Python中如何利用异步框架来实现高效的并发编程。1.异步编程概念异步编程允许程序在等待IO操作完成时......
  • 这才是〖@Validated与@Valid〗的区别和正确用法
    在Spring框架中,参数验证是保障数据完整性和合法性的关键步骤。@Valid 和 @Validated 是两个常用的验证注解,本文将深入分析它们的使用、原理、对比以及通过示例展示它们在实际项目中的应用。一、 @Valid和@Validated简介1.1@Valid@Valid 注解属于JavaValidationAPI的......
  • Vue路由params、query传参用法,以及form表单回车自动提交问题
    一、路由参数用法1.1query参数第一种方式传参:跳转路由并携带query参数,注意to的字符串写法将id和title拼接字符串形成地址<router-link:to="`/home/message/detail?id=${item.id}&title=${item.title}`">{{item.title}}</router-link>&nbsp;&nbsp;第二种方式传参:to......