Azure Data Factory含逗号请求头的Web Activity执行失败求助
我们通过Azure Function生成Amazon Selling Partner API所需的Authorization请求头,但由于该头值包含逗号,导致Azure Data Factory的Web Activity执行客户端错误,提示头值格式无效。
示例Authorization头:
AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=date;host;x-amz-content-sha256;x-amz-date;x-amz-storage-class,Signature=98ad721746da40c64f1a55b78f14c238d841ea1380cd77a1b5971af0ece108bd
错误信息:
Error calling the endpoint 'http://www.google.com'. Response status code: 'NA - Unknown'. More details: Exception message: 'NA - Unknown [ClientSideException] The format of value 'AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=date;host;x-amz-content-sha256;x-amz-date;x-amz-storage-class,Signature=98ad721746da40c64f1a55b78f14c238d841ea1380cd77a1b5971af0ece108bd' is invalid.'.
Request didn't reach the server from the client. This could happen because of an underlying issue such as network connectivity, a DNS failure, a server certificate validation or a timeout.
方案1:用双引号包裹Authorization头值
Azure Web Activity会将逗号识别为多个头值的分隔符,因此需要将整个Authorization头值用双引号包裹,避免解析错误:
- 直接在Web Activity的请求头配置中,给Authorization值添加双引号:
"AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=date;host;x-amz-content-sha256;x-amz-date;x-amz-storage-class,Signature=98ad721746da40c64f1a55b78f14c238d841ea1380cd77a1b5971af0ece108bd" - 如果通过Azure Function返回头值,可在Function中直接返回带双引号的字符串,或在ADF中用表达式拼接:
@concat('"', activity('YourAzureFunctionActivity').output.authorizationHeader, '"')
方案2:在Azure Function中直接发起SP API请求
绕过Web Activity的头解析问题,将签名和请求逻辑全部放在Azure Function内:
- 在Function中完成SP API的请求签名生成
- 直接调用SP API接口并获取响应数据
- 将数据返回给ADF管道,Web Activity只需调用该Function即可拿到最终结果,无需处理请求头
方案3:使用ADF自定义连接器(长期集成推荐)
创建针对Amazon Selling Partner API的自定义连接器,利用连接器内置的签名处理逻辑,避免手动管理头格式:
- 在ADF中创建自定义连接器,配置AWS Signature Version 4认证方式
- 管道中使用该连接器调用SP API,无需手动处理签名和头格式问题
内容的提问来源于stack exchange,提问作者TXAggie00

