代码之家  ›  专栏  ›  技术社区  ›  Roy Wang

气流在SimpleHttpOperator之间共享cookie

  •  0
  • Roy Wang  · 技术社区  · 3 年前
    login_task = SimpleHttpOperator()
    mutation_task = SimpleHttpOperator()
    

    这个 login_task 设置cookie。如何将此cookie与共享 mutation_task ?

    0 回复  |  直到 3 年前
        1
  •  0
  •   yan-hic    3 年前

    只是有同样的问题。问题是 HttpHook.run() 由操作员调用重新实例化一个新的 Session() 每次呼叫操作员时。

    我正要编写一个自定义挂钩/运算符,但发现 SimpleHttpOperator 传递 **kwargs prepare.Request() 在里面 run() .

    由于操作员返回 response 对象,解决方案很简单:

    # save only the cookies returned to XCom
    login_task= SimpleHttpOperator(
        ...,
        response_filter=lambda response: response.cookies
    )
    
    # run multiple related tasks but before the cookie expires
    mutation_task = SimpleHttpOperator(
        ...,
        cookies={{ ti.xcom_pull(task_ids="login_task") }}
    )
    

    目前这对我来说很有效,但这还远远不够理想,因为你可能需要经常刷新cookie,因此需要更多的任务。此外,如果您使用 KubernetesExecutor ,开始一个是荒谬的 Pod 只是为了得到一块饼干。。。

    作为参考,运算符和钩子的源代码: https://airflow.apache.org/docs/apache-airflow-providers-http/stable/_api/airflow/providers/http/index.html