Как передать JSON в URL через CURL?
Я хочу сделать что-то вроде следующего:
curl localhost:8080/myapp/?params={"first_key":"I'm the first value","second_key":"the second value"}
Это работает довольно нормально, когда я пытаюсь получить доступ к странице через браузер, но это не работает через cURL. Что я делаю неправильно?
1 ответ
Проблема вызвана синтаксическим анализатором URL-адреса cURL (см. Документацию):
Вы можете указать несколько URL или частей URL, написав наборы деталей в фигурных скобках, как показано в:
Http://{один, два, три}.com
Таким образом, ваша команда расширяется до:
curl localhost:8080/myapp/?params="first_key":"I'm the first value"
curl localhost:8080/myapp/?params="second_key":"the second value"
Вам нужно использовать -g
вариант (или --globoff
):
Эта опция отключает "анализатор глобализации URL". Когда вы устанавливаете эту опцию, вы можете указать URL-адреса, которые содержат буквы {}[], без их интерпретации самим curl.
Так:
curl -g localhost:8080/myapp/?params={"first_key":"I'm the first value","second_key":"the second value"}
Затем, чтобы сохранить двойные кавычки, вам нужно заключить URL в одинарные кавычки:
curl -g 'localhost:8080/myapp/?params={"first_key":"I'\''m the first value","second_key":"the second value"}'