【发布时间】:2023-03-28 14:58:01
【问题描述】:
login_task = SimpleHttpOperator()
mutation_task = SimpleHttpOperator()
login_task 设置 cookie。如何与mutation_task 共享此 cookie?
【问题讨论】:
login_task = SimpleHttpOperator()
mutation_task = SimpleHttpOperator()
login_task 设置 cookie。如何与mutation_task 共享此 cookie?
【问题讨论】:
刚刚遇到同样的问题。问题是运算符调用的HttpHook.run() 每次调用运算符时都会重新实例化一个新的Session()。
我正要编写一个自定义钩子/运算符,但发现SimpleHttpOperator 在run() 中将**kwargs 传递给prepare.Request()。
由于操作符返回的是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,那么仅仅为了获取cookie而启动Pod是荒谬的......
作为参考,操作符和钩子的源代码: https://airflow.apache.org/docs/apache-airflow-providers-http/stable/_api/airflow/providers/http/index.html
【讨论】: