我正在尝试使用Airflow获取API响应并将其保存到文件中以进行进一步处理。 Airflow在docker容器中,它需要代理和证书才能连接到网络。当直接从docker使用curl时(将代理和证书传递给它),它可以工作并显示结果,但我无法在Airflow中使用SimpleHTTPOperator复制它。 这就是我尝试过的;
get_poke_stats = SimpleHttpOperator(
task_id="get_poke_stats",
method="GET",
http_conn_id="http_poke_api",
endpoint="pokemon/psyduck",
headers={"Content-Type": "application/json"},
xcom_push=True,
proxies={"https": "http://127.0.0.1:8080", "http": "http://127.0.0.1:8080"},
# verify="/path/to/cert/file/file.cert",
cert="/path/to/cert/file/file.cert",
dag=dag
)
连接总是超时,我已经尝试了证书和验证,并且发生了同样的事情。 我尝试过在Ubuntu安装中使用其他PC。它无需代理就可以访问Internet,并且可以正常工作,因此必须通过代理和证书变量来实现,但是我无法找到有效的组合。
这是从日志中获取的,看起来像是通过了变量,但是..
Subtask get_poke_stats **kwargs: {'proxies': {'https': 'http://127.0.0.1:8080', 'http': 'http://127.0.0.1:8080'}, 'verify': '/path/to/cert/file/file.cert'}
然后它继续超时
{base_hook.py:84} INFO - Using connection to: id: http_poke_api. Host: https://pokeapi.co/api/v2/, Port: None, Schema: None, Login: None, Password: None, extra: {}
{http_hook.py:131} INFO - Sending 'GET' to url: https://pokeapi.co/api/v2/pokemon/psyduck
{local_task_job.py:124} WARNING - Time since last heartbeat(0.03 s) < heartrate(5.0 s), sleeping for 4.969908 s