使用cURL调用SharePoint API遇400错误,求URL编码解决方案
让我来帮你理清这个问题——你现在的核心错误是把SharePoint REST API的路径部分错误地当成了GET查询参数来处理,这才导致了400请求错误。
问题分析
你原本的目标API路径是:
.../_api/web/lists/GetByTitle('titles list')/items
但你用-G和--data-urlencode参数时,会把这些拆分的部分转换成URL的查询参数(也就是?后面的内容),实际发送的请求URL会变成类似这样:
.../_api/web/lists/GetByTitle?('titles+list')=&/items=
这完全不符合SharePoint REST API的路径规则,自然会返回400错误。
正确的cURL命令
你需要直接把完整的API路径作为请求URL,不需要拆分。如果URL里包含空格、括号这类特殊字符,用单引号或双引号包裹整个URL即可:
curl -v -L --ntlm --user user:password -H 'Accept: application/json;odata=verbose' ".../_api/web/lists/GetByTitle('titles list')/items"
额外说明
- 如果你在Windows命令提示符下执行,可能需要把单引号换成双引号,同时内部的单引号可以保留:
curl -v -L --ntlm --user user:password -H "Accept: application/json;odata=verbose" ".../_api/web/lists/GetByTitle('titles list')/items" - 也可以手动对URL里的空格进行编码(替换成
%20),这样不需要依赖引号的处理:curl -v -L --ntlm --user user:password -H 'Accept: application/json;odata=verbose' ".../_api/web/lists/GetByTitle('titles%20list')/items" - 确认你的
user:password是有权限访问该SharePoint列表的账号凭据,--ntlm参数适用于NTLM认证的环境,如果你的SharePoint用的是其他认证方式(比如OAuth),可能需要调整认证参数。
内容的提问来源于stack exchange,提问作者Hemanth
相关产品推荐
相关产品推荐

