Команда cURL работает в Linux, но не в Windows 2008

687
Ian M

Я установил cURL на Windows 2008 Server и пытаюсь выполнить приведенную ниже команду. Эта команда прекрасно выполняется на компьютере с Ubuntu в той же локальной сети, но когда я запускаю ее в Windows, я получаю следующие ошибки:

curl -H "Content-Type: application/json" -X POST -d '{ "entity_id": "switch.study_cam" }' https://192.168.1.99:8123/api/services/switch/turn_off?api_password=MyAPIPassword --insecure curl: (6) Could not resolve host: entity_id curl: (6) Could not resolve host: switch.study_cam curl: (3) [globbing] unmatched close brace/bracket in column 1 {"message": "Data should be valid JSON"} 

Я протестировал cURL в Windows с http://www.google.com, и он вернул верный HTML, поэтому, похоже, он установлен правильно.

Существуют ли различия в синтаксисе между cURL для Windows и Linux, или есть какое-то другое объяснение того, почему приведенная выше команда не работает в Windows?

2
Проблема, скорее всего, заключается в том, что командная строка Windows по-разному интерпретирует одинарные и двойные кавычки, а не имеет ничего общего с curl hardillb 6 лет назад 0
Проблема, скорее всего, в различиях используемой оболочки, потому что, например, cmd.exe и bash поддерживают разный синтаксис. Глядя на ошибку, она начинается там, где ', "` Thorsten Schöning 6 лет назад 0

2 ответа на вопрос

1
mvw

Я бы поместил JSON в файл, например json.txt, и использовал бы, curl -d @json.txt чтобы избежать проблемы обработки кавычек в оболочке.

Это дало бы что-то вроде

curl -H "Content-Type: application/json" -X POST -d @json.txt \ https://192.168.1.99:8123/api/services/switch\ /turn_off?api_password=MyAPIPassword --insecure 

Если вы пропустите оболочку Unix, MSYS2 - это хорошая система для добавления обычных инструментов на ваш компьютер с Windows (хотя она должна быть новее, чем Windows XP / Windows Server 2003).

1
hardillb

Проблема, скорее всего, заключается в том, что командная строка windows по-разному интерпретирует одинарные и двойные кавычки, а не имеет ничего общего с curl.

Попробуйте поменять местами двойные и одинарные кавычки в разделе JSON:

curl -H "Content-Type: application/json" -X POST -d "{ 'entity_id': 'switch.study_cam' }" https://192.168.1.99:8123/api/services/switch/turn_off?api_password=MyAPIPassword --insecure 

Похожие вопросы