Выполнение команды cURL для загрузки содержимого файла (путем заполнения формы), подобного следующему curl -L -X POST -F 'edit=filename' http://website.local/example -F 'filecontent=test;2;3', будет работать на High Sierra, но не на Catalina.

Каталина продолжает останавливаться на точке с запятой ; и игнорирует все остальное, потому что интерпретирует точку с запятой и выводит:

Warning: skip unknown form field: 2 Warning: skip unknown form field: 3

Я пробовал разные вещи, например, экранировать его \; и заключать его в одинарные кавычки, но все равно безуспешно, также пытался перейти на bash или другие оболочки, кроме zsh.

Следуя примеру, curl -F 'colors="red; green; blue";type=text/x-myapp' example.com работает, я сейчас просто пытаюсь прочитать содержимое файла. Код, который работает на High Sierra: -F "filecontent=$(<Example.txt)"

Загружаемый файл содержит точки с запятой, а текст загружается до первой точки с запятой.

Curl 7.54.0 в High Sierra
curl 7.64.1 в Каталине

5
Lex Lopez 16 Окт 2019 в 22:23

1 ответ

Лучший ответ

Измените с --form на --form-string, чтобы предотвратить анализ ;key=value (используемый для назначений ;type=text/x-myapp).


Таким образом, вы можете изменить соответствующую строку:

curl "${other_args[@]}" -F "filecontent=$(<file)"

Чтобы :

curl "${other_args[@]}" --form-string "filecontent=$(<file)"
7
2 revs 16 Окт 2019 в 20:25