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

通过curl在SharePoint创建文件夹遇curl: (56)连接重置错误求助

问题

在Azure DevOps发布流水线中尝试通过curl调用SharePoint API创建文件夹,因市场插件报错频繁改用此方案,但执行后等待约5分钟返回curl: (56) Recv failure: Connection was reset错误,无法正常创建文件夹。以下为原脚本及关键执行日志:

原脚本

set authorization=Authorization: Bearer $(System.AccessToken)
set accept=Accept: application/json;odata=verbose
set contentT=Content-Type:application/json
set content={"__metadata":{"type":"SP.Folder"},"ServerRelativeUrl":"Freigegebene Dokumente/Development-Release/Rel_$(ReleaseVersion)_$(Release.Attemptnumber)"}
call :strLen content cLen
set contentLen=Content-Length: %cLen%

curl -X POST -H %accept% -H %authorization% -H %contentT% -H %contentLen% -H %content% https://kenovawn.sharepoint.com/_api/web/folders --verbose

exit /b

:strLen
setlocal enabledelayedexpansion

:strLen_Loop
   if not "!%1:~%len%!"=="" set /A len+=1 & goto :strLen_Loop
(endlocal & set %2=%len%)
goto :eof

关键执行日志

2025-05-08T08:02:50.1895603Z * Could not resolve host: application
2025-05-08T08:02:50.1896615Z curl: (6) Could not resolve host: application
...
2025-05-08T08:02:52.4662228Z * Could not resolve host: Bearer
2025-05-08T08:02:52.4663155Z curl: (6) Could not resolve host: Bearer
...
2025-05-08T08:07:33.6224982Z * Recv failure: Connection was reset
2025-05-08T08:07:33.6228805Z curl: (56) Recv failure: Connection was reset
2025-05-08T08:07:33.7026082Z ##[error]Cmd.exe exited with code '56'.

问题分析与修复方案

  • 参数格式错误:Header变量包含空格(如Accept: application/json;odata=verbose),未用引号包裹,导致curl将Header拆分为多个参数,把application当成目标主机,触发Could not resolve host错误。
  • 请求体传递错误:将JSON请求体通过-H(Header参数)传递,而非-d(请求体参数),导致请求格式完全不符合API要求,服务器无法处理最终超时重置连接。
  • 冗余的Content-Length计算:curl会自动计算并添加Content-Length头,手动计算容易出错,无需额外处理。

修正后的脚本

set "authorization=Authorization: Bearer $(System.AccessToken)"
set "accept=Accept: application/json;odata=verbose"
set "contentT=Content-Type:application/json"
set "content={"__metadata":{"type":"SP.Folder"},"ServerRelativeUrl":"Freigegebene Dokumente/Development-Release/Rel_$(ReleaseVersion)_$(Release.Attemptnumber)"}"

curl -X POST -H "%accept%" -H "%authorization%" -H "%contentT%" -d "%content%" https://kenovawn.sharepoint.com/_api/web/folders --verbose

exit /b

额外注意事项

  • 确保Azure DevOps流水线服务主体对目标SharePoint站点有Contributor或更高权限,需在SharePoint站点权限设置中添加服务主体并授权。
  • 确认$(System.AccessToken)在流水线中已启用:在流水线编辑页面的「代理作业」设置中,勾选「允许脚本访问OAuth令牌」。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 05:27:02