Возможно ли читать только первые N байтов с HTTP-сервера с помощью команды Linux?

Вот вопрос.

Учитывая URL-адрес http://www.example.com, можем ли мы прочитать первые N байтов на странице?

  • используя wget, мы можем загрузить всю страницу.
  • используя curl, существует -r, 0-499 определяет первые 500 байтов. Кажется, проблема решена.

    Вы также должны знать, что на многих серверах HTTP/1.1 эта функция не включена, поэтому, когда вы пытаетесь получить диапазон, вместо этого вы получите весь документ.

  • используя urlib в python. аналогичный вопрос здесь, но, по словам Константина, это действительно так?

    В прошлый раз, когда я пробовал эту технику, это провалилось, потому что на самом деле невозможно было прочитать с HTTP-сервера только указанный объем данных, т.е. Вы неявно прочитали весь HTTP-ответ и только затем прочитали из него первые N байтов. Итак, в конце концов вы загрузили весь 1Gb злонамеренный ответ.

Таким образом, проблема в том, как мы можем на первый взгляд прочитать первые N байтов с HTTP-сервера?

С уважением и благодарностью

Ответы

Ответ 1

curl <url> | head -c 499

или же

curl <url> | dd bs=1 count=499

следует сделать

Кроме того, есть более простые утилиты, возможно, доступность borader, например

    netcat host 80 <<"HERE" | dd count=499 of=output.fragment
GET /urlpath/query?string=more&bloddy=stuff

HERE

Или же

GET /urlpath/query?string=more&bloddy=stuff

Ответ 2

Вы можете сделать это изначально следующей командой curl (нет необходимости загружать весь документ). Согласно странице culr man:

ДИАПАЗОН     В HTTP 1.1 введены байтовые диапазоны. Используя это, клиент может запросить получение только одного или нескольких подчастей определенного документа. curlподдерживает это с помощью флага -r.

Get the first 100 bytes of a document:
    curl -r 0-99 http://www.get.this/

Get the last 500 bytes of a document:  
    curl -r -500 http://www.get.this/

`curl` also supports simple ranges for FTP files as well.
Then you can only specify start and stop position.

Get the first 100 bytes of a document using FTP:
    curl -r 0-99 ftp://www.get.this/README

Он работает для меня даже с веб-приложением Java, которое развертывается в GigaSpaces.

Ответ 3

Вы также должны знать, что многие У серверов HTTP/1.1 нет этого функция включена, так что когда вы попытайтесь получить диапазон, вместо этого вы получить весь документ.

Вам все равно нужно получить всю сеть, так что вы можете получить паутину с завитками и, например, соединить ее с головой.

голова

c, --bytes = [-] N     напечатайте первые N байтов каждого файла; с ведущим "-", распечатать все но последние N байтов каждого файла

Ответ 4

Сделайте соединение сокета. Прочитайте нужные байты. Закрыть, и все готово.

Ответ 5

Я пришел сюда, чтобы найти способ времени обработки сервера, который, как я думал, можно измерить, указав завиток, чтобы остановить загрузку после 1 байта или что-то в этом роде.

Для меня лучшим решением оказалось сделать запрос HEAD, так как это обычно позволяет серверу обрабатывать запрос как обычно, но не возвращает тело ответа:

time curl --head <URL>