Ошибка формата JSON, генерируемая cUrl, но не Wget? - PullRequest
1 голос
/ 29 марта 2019

Я отправляю запрос POST через пакетный скрипт в Windows. Я вручную установил wget, и все отлично работает, но я бы хотел использовать cUrl, поскольку он недавно стал стандартной функцией Windows 10 и может быть запущен на других более новых компьютерах. Проблема в том, что cUrl выдает ошибку форматирования Json, несмотря на отсутствие каких-либо особых исключений символов.

Я пытался изменить цитаты на апострофы и наоборот, используя обратную косую черту и каретки в качестве escape-символов. Этот скрипт wget работает:

wget --quiet ^
  --method POST ^
  --header 'content-type: application/json' ^
  --body-data '{"method":"passthrough", "params": {"deviceId": "[MyId]", "requestData": "{\"system\":{\"set_relay_state\":{\"state\":0}}}" }}' ^
  --output-document ^
  - 'https://eu-wap.tplinkcloud.com/?token=[MyToken]'

Однако в том же JSON в cUrl отказано:

curl -X POST -H 'content-type:application/json' -d '{"method":"passthrough","params":{"deviceId":"[MyId]","requestData":"{\"system\":{\"set_relay_state\":{\"state\":0}}}"}}' https://wap.tplinkcloud.com?token=[MyToken]

Спасибо за любой совет.

1 Ответ

1 голос
/ 29 марта 2019
  • Вы используете curl (C:\Windows\System32\curl.exe) в Windows 10 в командной строке для Windows.

Если мое понимание верно, как насчет этой модификации?

Измененная команда curl для Windows:

curl -H "content-type:application/json" -d "{\"method\":\"passthrough\",\"params\":{\"deviceId\":\"[MyId]\",\"requestData\":\"{\\\"system\\\":{\\\"set_relay_state\\\":{\\\"state\\\":0}}}\"}}" https://eu-wap.tplinkcloud.com/?token=[MyToken]
  • В командной строке Windows используйте двойные кавычки вместо одинарных.
  • В объекте JSON, пожалуйста, избегайте каждого двойногоцитаты.

Примечание:

  • Я не уверен относительно правильного URL из вашего ответа.Поэтому, пожалуйста, используйте правильный URL при тестировании выше.
...