Есть ли способ ограничить размер тела ответа HTTP, получаемого Dispatch?

Я использую Dispatch для извлечения большого количества страниц, из которых мне нужны только первые несколько K, а страницы иногда достигают гигабайт. Есть ли способ в scala-dispatch (отправка/перезагрузка) или, может быть, в HTTP-запросе обрезать полученное тело?

(Контекст: я читаю файлы CSV из общедоступных источников данных и просто пытаюсь получить имена полей (строка заголовка) и одну строку выборочных данных.)


person Ed Staub    schedule 26.03.2015    source источник


Ответы (1)


Вы можете использовать > handler< /a>, что дает вам доступ к базовому com.ning.http.client.Response экземпляр. Оттуда все просто:

import java.io._
import dispatch._, Defaults._
import com.ning.http.client.Response

def excerpt(bytes: Int) = {
  response: Response =>
    response.getResponseBodyExcerpt(100, "UTF-8")
}

def lines(count: Int) = {
  response: Response =>
    val stream = response.getResponseBodyAsStream
    val reader = new BufferedReader(new InputStreamReader(stream))
    Stream.continually(reader.readLine()).take(count).toList
}

val u = url("http://stackoverflow.com/")
Http(u > excerpt(100)).onComplete(println)
Http(u > lines(2)).onComplete(println)

Вы также можете попытаться запросить меньший байтовый интервал с сервера, используя Range заголовок. Для этого требуется поддержка сервера, которую можно протестировать, используя запрос HEAD, а затем просмотрев заголовок ответа Accept-Ranges: bytes.

person Ionuț G. Stan    schedule 26.03.2015