Я могу сохранить весь HTTP-ответ с сервера, используя netcat> output.txt, однако это также сохраняет и заголовки HTTP-ответа, если тело является текстом, это не проблема, так как я могу просто игнорировать заголовки при чтении вывода. текст.

Однако, если это бинарный файл, такой как изображение, тогда я не смогу просмотреть изображение, как я могу сохранить только тело ответа, используя netcat или какую-либо другую команду с выводом netcat, передаваемым по нему?

1 ответ1

0

Как указывалось выше, wget (и lynx ... и curl) могут работать намного лучше, чем netcat, но если вы настаиваете на этом, вы можете отфильтровать заголовок с помощью вашего любимого языка сценариев. Поскольку заголовок http завершается символом \r \n \r \n, что в unix-подобных системах (я думаю, это то, где вы находитесь) фактически означает «все строки заголовка плюс строка, содержащая только \r», это не так сложно как кажется на первый взгляд.

Используя gawk (да, GNU awk !, поскольку RT не известен другим версиям awk, AFAIK), это может быть вашей командой:

netcat ... | gawk 'NR==1,/^\r$/ {next} {printf "%s%s",$0,RT}' > something.out

Если вопрос «почему бы просто не использовать печать вместо этого уродливого метода?"всплыло бы, ответ: мы не знаем, заканчивается ли последняя запись (что gawk считает записью) новой строкой или нет, и мы также не имеем понятия, существует ли эта последняя новая строка значительный или нет. Мы можем быть уверены, если мы напишем это там, только если это было там на входе. RT будет пустым, если его не было, поэтому вывод будет тем, что было отправлено, и не более.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .