Страницы

Поиск по вопросам

воскресенье, 15 марта 2020 г.

Существуют ли сторонние сервисы, которые могут разархивировать данные, поступающие из API StackOverflow?

#json #сжатие #stackoverflow_api


Вместо JSON получаю по API набор цифр. Сказали это сжатые данные.

Вот сам запрос:

https://api.stackexchange.com/2.2/search?order=desc&sort=activity&intitle=corezoid&site=ru.stackoverflow.com


По клику все работает нормально. Если использую postman, тоже. Мне сказали, что postman
автоматически разархивирует сжатые данные.

Данные, которые поступают мне в систему по API выглядят так:

{
    "create_time": "2015.11.25 18:09:04",
    "change_time": "2015.11.25 18:09:04",
    "node_prev_id": "5655caeaf6c37670c306ddef",
    "status": "processed",
    "user_id": 5781,
    "data": {
            "__conveyor_api_return_description__": "Not valid http result json(<<31,139,8,0,0,0,0,0,4,0,171,86,202,44,73,205,45,86,178,138,142,213,81,202,72,44,142,207,205,47,74,85,178,74,75,204,41,78,213,81,42,44,205,47,73,140,207,
77,172,80,178,50,54,48,128,241,139,82,115,19,51,243,50,243,210,149,172,140,44,141,106,1,178,195,112,174,67,0,0,0>>)",
            "__conveyor_api_return_http_code__": 200,
            "__conveyor_api_return_type_tag__": "api_no_valid_json",
            "__conveyor_api_return_type_error__": "software"
    }
}

    


Ответы

Ответ 1



Какой библиотекой/программой вы делаете запрос? Выкиньте ее и забудьте, раз в 2015м году она не умеет декодировать gzip. Вообще говоря, это ошибка на стороне stackoverflow api. По стандарту HTTP они не должны сжимать ответ без заголовка запроса Accept-Encoding: gzip - но сжимают. Можете попытаться сообщить им о баге. Или можете запросить новую фичу у разработчиков вашей библиотеки. Если же вам надо декодировать сообщение, не меняя клиентскую библиотеку и не дожидаясь исправлений от разработчиков - то такой "сторонний сервис" есть на любом линуксе: команда gzip -d сделает то, что вам надо. Под виндой можно поставить cygwin. Также для многих языков программирования есть библиотеки для декодирования gzip. К сожалению, вы не указали на чем пишете, поэтому не могу посоветовать вам конкретную.

Ответ 2



Сервер посылает сжатые данные, только если сжатие поддерживается на стороне клиента. Например клиентом при запросе GET/POST в Request передается: Accept-Encoding: gzip, deflate, lzma, sdch тогда сервер может перед отправкой сжать данные и отправить. При этом в Response он сообщит какой метод сжатия использовался: Content-Encoding: gzip API StackOverflow, почему то игнорирует запрос пользователя и сжимает с помощью gzip все данные, так что проблема на стороне сервера, вам лишь остается каждый раз разархивировать данные.

1 комментарий: