通过Curl调用Airflow实验性REST API触发DAG遇400错误求助
我来帮你排查这个400错误的问题,之前我也碰到过类似情况,咱们一步步来分析可能的原因和解决办法:
1. 请求体格式不合法(最常见原因)
Airflow的实验性DAG触发API要求请求体是合法的JSON格式,哪怕你不需要传任何参数,也不能用空字符串-d ''来传递——服务器收到空字符串后无法解析成JSON,直接就返回400错误了。
修正方法很简单,把空字符串改成空的JSON对象'{}',同时最好明确指定请求头的Content-Type为application/json,确保服务器能正确识别请求格式。修正后的curl命令如下:
curl -X POST -v -u user@somedoman.com:somepassword -H "Content-Type: application/json" -d '{}' 'https://airflow.somedomain.com/api/experimental/dags/my_dag_id/dag_runs'
2. 检查DAG ID的正确性
确认你命令里的my_dag_id是Airflow Web UI中显示的准确DAG ID——大小写、拼写、特殊字符都要完全匹配。如果DAG ID不存在,部分Airflow版本也会返回400错误(而非预期的404),这点容易被忽略。
3. 验证认证方式是否匹配
你用了-u参数做Basic Auth,先确认你的Airflow部署确实启用了Basic Auth,并且用户名和密码是有效的。如果你的Airflow实例用的是Token认证(比如OAuth或内部Token),就需要替换成Header传Token的方式:
curl -X POST -v -H "Authorization: Bearer YOUR_AIRFLOW_TOKEN" -H "Content-Type: application/json" -d '{}' 'https://airflow.somedomain.com/api/experimental/dags/my_dag_id/dag_runs'
4. 确认API路径是否正确
double-check一下API路径:实验性API的标准路径是/api/experimental/dags/<dag_id>/dag_runs,确保你的域名后面没有多写或少写路径片段,比如有没有把experimental拼错,或者漏掉了某个斜杠。
先从请求体格式的修改开始尝试,这大概率能解决你的问题,如果还是不行,再依次排查后面的几点。
内容的提问来源于stack exchange,提问作者Brian Hochgurtel

