You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Curl写入Azure Data Lake Storage Gen2时缺失必填HTTP头问题

解决ADLS Gen2写入数据的MissingRequiredHeader错误

问题根源

你混淆了Blob存储与ADLS Gen2文件系统的API规范:用ADLS Gen2的DFS端点(.dfs.core.windows.net)发起请求,却携带了Blob专属的x-ms-blob-type头,同时SAS参数sr=b(Blob级别权限)与DFS端点不兼容,系统因此判定缺失必需请求头。

修正方案

1. 调整请求头,匹配DFS端点规范

  • 删除x-ms-blob-type: BlockBlob:这是Blob存储API的专属头,DFS端点不需要
  • 添加x-ms-resource-type: file:明确告知ADLS Gen2你要操作的是文件
  • 统一API版本:将x-ms-version改为与SAS中的sv一致的值(你的SAS是sv=2022-11-02,所以头改为x-ms-version: 2022-11-02)
  • 修正x-ms-date格式:Azure要求RFC1123标准格式,用date -u +"%a, %d %b %Y %H:%M:%S GMT"生成,避免格式不匹配引发隐藏错误

2. 修正SAS参数兼容性

你的SAS中sr=b表示Blob级别权限,DFS端点需要文件系统(容器)级别的权限,需确保生成SAS时选择容器(文件系统)级别,对应参数sr=c。如果无法重新生成SAS,也可改用Blob存储端点(https://targetsystem.blob.core.windows.net/...),此时保留x-ms-blob-type头即可,但ADLS Gen2推荐优先用DFS端点。

3. 修正Content-Length(可选但关键)

你指定的Content-Length:13与实际数据"Sangram Mohanty"的长度(15字符,含空格)不匹配,后续会触发额外报错。建议要么删除该头让Curl自动计算长度,要么改为正确的15。

修正后的Curl命令

curl -X PUT \
  -H "x-ms-version: 2022-11-02" \
  -H "x-ms-date: $(date -u +"%a, %d %b %Y %H:%M:%S GMT")" \
  -H "x-ms-resource-type: file" \
  -H "Content-Type: text/plain" \
  --data "Sangram Mohanty" \
  "https://targetsystem.dfs.core.windows.net/target/sink/write_from_variable.txt?sp=racwmeop&st=yyyy-MM-ddT04:33:40Z&se=yyyy-MM-ddT12:33:40Z&spr=https&sv=2022-11-02&sr=c&sig=xxxxxxxxxxxxxxxxxxxxxxxxxx"

ADF Web活动适配配置

在ADF Web活动中按以下设置配置:

  • 方法选择PUT
  • 请求头添加:
    • x-ms-version: 2022-11-02
    • x-ms-resource-type: file
    • x-ms-date:用ADF表达式utcNow('R')生成标准格式时间
  • 请求体填写变量内容(无需手动指定Content-Length,ADF会自动处理)
  • URL使用sr=c的DFS端点SAS链接

按以上配置即可解决错误,成功将变量数据写入ADLS Gen2指定文件。

内容的提问来源于stack exchange,提问作者awesome_sangram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 20:12:44