я столкнулся несколько сайтов, которые использует JSON
для запроса и ответа
я встречаю двух типов:
1-application/x-www-form-urlencoded
как запрос и возвращает ответ типа application/json
контента
2-application/json
тип контента как для запроса и ответа в type 1
я попытался изменить тип ответного контента с использованием
mIdHttp.Response.ContentType := 'application/json';
, но с помощью http-анализатора я вижу, что он не изменяется, и его все еще text/html
теперь я не знаю, связана ли проблема с тем, что я не могу изменить тип контента или нет, но я не знаю, как это сделать с json
!
Несколько вопросов относительно json
:
1- Должен ли я кодировать данные json при публикации? как ?
2- Как я могу разобрать код ответа json? как его получить ? нужна ли какая-то кодировка или специальное преобразование?
3- какая настройка idhttp для json изменяется с каждым сайтом и нуждается в настройке?IdHttp: как бороться с запросом JSon и ответ
Я понимаю, что мои вопросы звучат немного повсеместно, но все остальные вопросы очень специфичны и не объясняют основы при работе с типом контента 'application/json'
.
Edit 1:
благодаря Реми Лебо ответ я был в состоянии успешно работать с type 1
, но я до сих пор проблемы с отправкой JSON
запрос, может кто-то пожалуйста, поделитесь в рабочий пример, это один из сайты размещения информации, пожалуйста, используйте это для примера:
Одно важное замечание: этого конкретного сайта и после запроса Conte nt точно подобны друг другу! и это расстраивает меня, потому что на сайте, я укажу start date
и end date
затем нажмите на folder like icon
и это post
отправляется (тот, который вы можете увидеть выше), и result
должен быть links
(и это) но вместо появляются только в request content
, они также отображаются в post
! (также я пытаюсь получить ссылки, но на post
ссылки, что я хочу, также отправляются, как я могу отправить что-то, чего у меня нет?)
только для большей ясности здесь место я заполнить дату и значок я упомянул:
Универсального решения нет. Каждая реализация может отличаться. Вы можете контролировать, хотите ли вы Indy кодировать параметры с помощью 'hoForceEncodeParams' в' FHTTP.HTTPOptions' (если вы отправляете данные JSON в свой запрос, многие сайты не разрешают кодированный запрос). Не следует устанавливать «Response.ContentType». Это то, что сервер возвращает. Вы должны установить 'Request.ContentType' (то, что вы отправляете) и' Request.Accept' (что вы ожидаете от сервера) – smooty86
@ smooty86 флаг 'hoForceEncodeParams' применяется только при публикации' TStrings' в 'application/x-www -форма-urlencoded'. В этой ситуации это не применяется, поскольку вы не можете публиковать JSON с помощью 'TStrings', вместо этого вы должны использовать' TStream'. –
@RemyLebeau, вы ставите, я могу отправить JSON в TStrings :) Хотя я понимаю, что это может быть менее эффективным. – smooty86