通过aiohttp session.get请求时如何发送etag或上次修改

海盗应用
  • 我每分钟加载多个Feed网址
  • 我想发送一个http get请求,获取200个状态代码和完整数据(如果自上次加载以来数据已更改)
  • 如果自上次加载以来数据未更改,我希望使用http状态代码304,并且没有响应正文
  • 如果我使用Python feedparser的库发送GET请求,则会在此处提供此功能
  • 我如何使用aiohttp库执行此操作
  • 我如何发送etag并在GET请求中最后修改

    async with session.get(url) as response:
        text = await response.text()
        print(response.headers.get('etag'), response.headers.get('Last-Modified'))
    

如何发送etag并进行最后修改,并模拟类似于上述库的行为?

更新1

这是一些详细的代码

import asyncio
import aiohttp

async def load_feed(session, url):
    # Keep this an empty string for the first request
    etag = 'fd31d1100c6390bd8a1f16d2703d56c0'
    # Keep this an empty string for the first request
    last_modified='Mon, 11 May 2020 22:27:44 GMT'
    try:
        async with session.get(url, headers={'etag': etag, 'Last-Modified': last_modified}) as response:
            t = await response.text()
            print(response.headers.get('etag'), response.headers.get('Last-Modified'), response.status, len(t), response.headers)
    except Exception as e:
        print(e)

async def load_feeds():
    try:
        async with aiohttp.ClientSession() as session:
            tasks = []
            for url in ['https://news.bitcoin.com/feed/']:
                task = asyncio.ensure_future(load_feed(session, url))
                tasks.append(task)
            await asyncio.gather(*tasks, return_exceptions=True)
    except:
        pass

asyncio.get_event_loop().run_until_complete(load_feeds())

期望:

  • 第一次发送没有标题的请求
  • 获取带有etag和最后修改的完整响应的响应代码200
  • 使用etag和Last-modified重新发送请求
  • 获取没有响应正文的响应代码304

发生了什么-我每次都收到状态码200和完整的响应正文

离子t

Last-Modified是响应标头,对于请求,您可以使用If-Modified-Since

async def load_feed(session, url):
    headers = {
        "ETag": "fd31d1100c6390bd8a1f16d2703d56c0",
        "If-Modified-Since": "Mon, 11 May 2020 22:27:44 GMT"
    }
    try:
        async with session.get(url, headers=headers) as response:
            t = await response.text()
            print(response.headers.get("ETag"), response.headers.get('Last-Modified'), response.status, len(t))
    except Exception as e:
        print(e)

输出(通知状态= 304):

"fd31d1100c6390bd8a1f16d2703d56c0" Mon, 11 May 2020 22:27:44 GMT 304 0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

通过代理连接发送带有标题的aiohttp发布请求

如何在aiohttp请求处理程序中通过客户端websocket发送数据

如何通过电子邮件发送$ _SESSION变量

如何通过session.createAnchor创建锚

通过函数写入 SESSION

如何通过Struts在JSP中从Servlet doGet获取session()。getAttribute()

如何注销并通过Passport和Express-session清除会话?

如何通过OCI设置V $ SESSION.PROGRAM?

如何禁止通过 Express-session 存储的会话的 TTL 刷新?

aiohttp:未封闭的客户端会话client_session

$_SESSION var 没有通过

当我希望通过升级内的Session对象更改数据时,如何测试alembic迁移?

如何通过python通过不同的IP发送GET请求?

如何通过GET请求通过提取API发送数据?

如何使用Hibernate通过Session.get()查询电子邮件ID?

如何通过在休眠中使用 session.get 检索数据来跳过空值

在php上修改SESSION数据时使用POST或GET

通过请求获取文件时如何发送文件?

通过Ajax发送请求时如何停止挂起页面

通过GET请求发送密码

在aiohttp请求中发送用户凭据

如何通过HTTP get请求发送授权密钥?

Aiohttp异步会话请求

用户单击时,是否可以通过锚标记传递SESSION ID?

如何通过SSL发送请求?

当我通过 UI 向 api 端点发出 GET/POST 请求时,如何发送我的 JWT 令牌?

如何在通过 Beanshell 预处理器在 JMeter 中发送之前修改 HTTP 请求?

如何在Laravel中通过Flash Session传递html标签?下面的代码不起作用

如何通过静态变量访问ASP.NET Core中的Session?