Возможно ли читать только первые 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>