通过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
相关产品推荐
相关产品推荐

