← 返回题库
中级

实现ETag缓存验证

未完成
中级参考 代码结构已给出,请填写 ____ 处
def solve():
    from pyodide.http import open_url
    from io import StringIO
    etag_records_csv = open_url(____).read()
    products_csv = open_url(____).read()
    import pandas as pd, hashlib, json
    from io import StringIO
    etags = pd.read_csv(StringIO(____))
    products = pd.read_csv(StringIO(____))
    def generate_etag(____):
        content = json.dumps(____)
        h = hashlib.sha256(content.encode()).hexdigest()[:____]
        return f'____'
    def handle_get(____):
        if resource_type == '____':
            row = products[products['____']==resource_id]
            if row.empty: return ____, None, None
            data = row.iloc[____][['____','____','____','____']].to_dict()
        else:
            data = {'____': resource_id}
        etag = generate_etag(____)
        if if_none_match and if_none_match == etag:
            return ____, etag, None
        return ____, etag, data
    print(____)
    for pid in [____, ____, ____]:
        code, etag, data = handle_get(____)
        print(____)
        code2, etag2, data2 = handle_get(____)
        print(____)
    print(____)

示例

输入
solve()
期望输出
ETag缓存验证:
  GET product/1: 200, ETag="c881640da70fec33"
  GET product/1 (If-None-Match): 304, body=none
  GET product/3: 200, ETag="b85f530ff2667d53"
  GET product/3 (If-None-Match): 304, body=none
  GET product/5: 200, ETag="4d0eae0937a6c554"
  GET product/5 (If-None-Match): 304, body=none
记录的ETag条目: 10
Python 代码 🔒 登录后使用
🔒

登录后即可练习

注册免费账号,在浏览器中直接运行 Python 代码