Я выполняю вызов curl из ASP с помощью WScript.Оболочка Объект.

Set objCmd = objWShell.Exec("cmd.exe /c echo "&dataString&" | /path/to/curl --cacert '/path/to/cert/cacert.pem' -X POST"&options&" -A """&useragent&""""&referer&" -F "&fileParamName&"=@-;type="&fileMIME&";filename=^"""&filename&"^"" --url """&url&"""")

Эта команда отправляет запрос curl с добавленным файлом. Содержимое файла исходит из стандартного stdin (echo) без необходимости записывать фактический файл на жесткий диск.

Моя проблема в том, что некоторые вызовы не работают должным образом из-за символов в dataString которые нарушают команду. dataString содержит JSON с пользовательским вводом из базы данных.
Содержимое JSON уже закодировано, поэтому символы преобразуются в \b , \t , \n , \f , \r , \" , \/ , \\ или кодируются как \uXXXX символы, в результате чего dataString выглядит следующим образом:

{"field":"User-String with \"encoded\" characters!\r\nSome other characters look like \u00FC or \u00E4.\r\nQuestion Marks?, Exclamation Marks!, 'SingleQuotes' and who knows what!"}

Итак ... echo {"field":"..."} | ... будет строка для выполнения.

До сих пор я пытался использовать двойные кавычки и одинарные кавычки или убегать с ^ но это не работает должным образом. По крайней мере, если я попытаюсь смоделировать это с помощью echo String | cat > testfile.txt в моем окне терминала.

Каких персонажей мне нужно убежать и как?

Редактировать:
Так как я выбрал решение devplayer для звонка с передачей файлов, вы можете подумать, что все готово. Но теперь я получил другой вид вызова без передачи файла и без необходимости конвейера, но с той же проблемой пользовательского ввода, которая должна быть должным образом экранирована.

Это как:

curl ... -d "<properly escaped string>" --url ...

1 ответ1

0

как насчет того, чтобы передать свою длинную строковую информацию в файл своей команде? Т.е. сохраните вашу строку данных в файле file.txt и передайте содержимое файла команде следующим образом:

/path/to/curl --cacert '/path/to/cert/cacert.pem' -X POST"&options&" -A """&useragent&""""&referer&" -F "&fileParamName&"=@-;type="&fileMIME&";filename=^"""&filename&"^"" --url """&url&""" < file.txt

?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .