як змусити curl виводити лише тіло відповіді http (json) і ніяких інших заголовків тощо


80

Я використовую curl у скрипті bash для отримання відповіді служби, як показано нижче,

response=$(curl -isb -H "Accept: application/json" "http://host:8080/some/resource")

Відповідь служби має тип json, і у браузері я міг би чудово відповісти.
Однак відповідь curl має і інші небажані речі (наприклад, cookie set, заголовок довжини вмісту в цьому випадку), і іноді фактична відповідь з'їдається.

Ось результат echo $response>

 Set-Cookie: rack.session=BAh7CEkiD3Nlc3Npb25faWQGOgZFVEkiRWJlY2JiOTE2M2Q1ZWI4NThjMDdi%0AYjRiOWRjMGMxMGEwYTBkMjE3NmJhZDVjYzY4YjY4ZTlmMTE2ZGVkYWE3MTMG%0AOwBGS
SIJY3NyZgY7AEZJIiVhZmQ2MmUyZGMxMzFmOGEwMjg3NDlhNWM3YmVm%0AN2FjNwY7AEZJIg10cmFja2luZwY7AEZ7B0kiFEhUVFBfVVNFUl9BR0VOVAY7%0AAFRJIi00MTc0OGM2MWNkMzljZTYxNzY3ZjU0
Y2I5OTdiYWRkN2MyNTBkYmU4%0ABjsARkkiGUhUVFBfQUNDRVBUX0xBTkdVQUdFBjsAVEkiLWRhMzlhM2VlNWU2%0AYjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDkGOwBG%0A--ee97a62095e7d42129
 tontent-Length: 354c8; path=/; HttpOnly

Це порушує мою логіку розбору відповіді.
Я бачив, як це відбувається з перервами, що дивно.

Чи є спосіб отримати "лише" відповідь json з виводу curl?
Я переглянув документацію про curl, але не міг побачити жодної речі / або я міг її пропустити.
Ціну будь-яку допомогу! Дякую

Відповіді:


130

Ви вказуєте -iваріант:

, --включити

(HTTP) Включіть заголовок HTTP у вихідні дані . Заголовок HTTP включає такі речі, як ім'я сервера, дата документа, HTTP-версія та багато іншого ...

Просто видаліть цю опцію з командного рядка:

response=$(curl -sb -H "Accept: application/json" "http://host:8080/some/resource")

Правда. Але дивно це; він працює безпосередньо з командного рядка. Але з сценарію bash він поводиться по-різному, я не бачу нічого у відповіді відлуння, крім літери "t"
Ріші,

2
Змінено echo "response is $ response" з echo $ response, і тепер я бачу правильну відповідь. Не знаю, чому б це було. Дякую!
Rishi

Одне навчання - це використання в команді завжди "цитування" змінної echo .. responsenew = $ (echo "$ response" | grep "abc")
Rishi,

Ріші, лапки навколо $ response уникають розбиття вмісту на нові рядки та пробіли
Пабло Адамес

-6
#!/bin/bash

req=$(curl -s -X GET http://host:8080/some/resource -H "Accept: application/json") 2>&1
echo "${req}"

20
Будь ласка, уникайте дампів коду, завжди намагайтеся пояснити, що робить код, або надайте коментар, навіть якщо це простий блок коду.
arco444
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.