Sharepoint RequestDigest интерпретируется как параметр в cURL

#rest #curl #sharepoint #talend #rhel

#rest #curl #sharepoint #talend #rhel

Вопрос:

Я использую следующую последовательность команд 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
  

Я не могу удалить пробел или минус, потому что это часть токена. Я уже пытался избежать заголовка несколькими способами, но безуспешно. У вас есть идея о том, как это решить?

Комментарии:

1. в компоненте tSystem вы используете одну команду или массив команд?

2. Я пробовал оба способа.

Ответ №1:

Я подозреваю, что вы вызываете curl через 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)"
  

Это не работает, потому что 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 .)

Комментарии:

1. Я запускаю команды в задании Talend ETL, используя их компонент tSystem. Пожалуйста, обратите внимание, что шаги «Получить токен» и «Загрузить файл» выполняются нормально. Кроме того, я получаю ответ 403 от Sharepoint, если удаляю пробел перед минусом.

2. Я думаю, что это скорее вопрос таланта. Вероятно, ему нужна какая-то похожая форма цитирования.