【问题标题】:Sharepoint RequestDigest is interpreted as parameter in cURLSharepoint RequestDigest 被解释为 cURL 中的参数
【发布时间】:2020-12-30 04:36:48
【问题描述】:

我使用以下 cURL 命令序列将文件上传到 Sharepoint。

# Get Token
curl -X POST -d "" --ntlm -u usr:pw http://.../_api/contextinfo
# Checkout File
curl -X POST -d "" -H "X-RequestDigest: 0x...,11 Sep 2020 14:45:30 -0000" --ntlm -u usr:pw "http://.../_api/web/GetFileByServerRelativeUrl('...')/checkOut()"
# Upload File
curl --ntlm -u usr:pw --upload-file ... http://...
# Check In
curl -X POST -d "" -H "X-RequestDigest: 0x...,11 Sep 2020 14:45:30 -0000" --ntlm -u usr:pw "http://.../_api/web/GetFileByServerRelativeUrl('...')/checkIn(comment='Comment',checkInType=0)"

使用 libcurl 在本地运行时效果很好。在 RHEL7 上运行时不会。然后标头标记中的“-0000”被解释为参数,导致下面的错误消息。

curl: option -0000': is unkown

我无法删除空格或减号,因为它是令牌的一部分。我已经尝试以多种方式逃避标题但没有成功。你知道如何解决这个问题吗?

【问题讨论】:

  • 在tSystem组件中,你使用的是单个命令还是命令数组?
  • 两种方法我都试过了。

标签: rest curl sharepoint talend rhel


【解决方案1】:

我怀疑你正在通过 SSH 调用 curl,如下所示:

ssh $host curl -X POST -d "" -H "X-RequestDigest: 0x...,11 Sep 2020 14:45:30 -0000" --ntlm -u usr:pw "http://.../_api/web/GetFileByServerRelativeUrl('...')/checkIn(comment='Comment',checkInType=0)"

这不起作用,因为 SSH 不会将参数向量作为字符串数组传输。相反,它传输一个字符串,由空格分隔的所有参数组成。相反,您必须编写如下内容:

ssh $host "curl -X POST -d \"\" -H \"X-RequestDigest: 0x...,11 Sep 2020 14:45:30 -0000\" --ntlm -u usr:pw \"http://.../_api/web/GetFileByServerRelativeUrl('...')/checkIn(comment='Comment',checkInType=0)\""

(请注意,在命令行上指定密码可能不安全,因为使用ps 可以看到参数。)

【讨论】:

  • 我正在使用 Talend ETL 作业中的 tSystem 组件运行命令。请注意,步骤“获取令牌”和“上传文件”运行良好。此外,如果我删除减号前面的空格,我会从 Sharepoint 收到 403 响应。
  • 我认为这更像是一个 Talend 问题。它可能需要一些类似的引用形式。
猜你喜欢
  • 2015-11-07
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
  • 1970-01-01
  • 2013-01-01
相关资源
最近更新 更多