я б принимал данные в буфер и парсил уже его.
1) как только в сокете появляются данные -> читаем в буфер
2) после каждого чтения проверяем, не сформировался ли в буфере полный HTTP заголовок
3) как только наберется заголовок, парсим и выкусываем его
4) аналогично по частям ждём, собираем и парсим JSON
5) повторяем всё с начала - ждём новый HTTP заголовок и так далее
моя
прокся на сях, где чёрт ногу сломит
(сомневаюсь, что сильно поможет xD)