Использование клиента openssl s _для получения файла с https-сервера из командной строки

Простите за оживление мертвой темы, но вкратце да, это возможно! Кажется, я понял наконец, как использоватьxrandr.

Я использовалumc-универсальный модельный калькулятор для вычисления линий мод, но того же можно добиться с помощью cvtи gtf. Это не должно иметь большого значения с ЖК-дисплеями.

Вот шаги, чтобы обрезать верхние 100 пикселей дисплея. Измените разрешение в соответствии с вашими настройками.

  1. umc 1920 980 60

    Выход:

  # 1920x980x60.00 @ 61.080kHz
  Modeline "1920x980x60.00"  156.364800  1920 2032 2240 2560  980 984 988 1018  -HSync +VSync
  1. xrandr --newmode SMOL 156.364800 1920 2032 2240 2560 980 984 988 1018 -HSync +VSync
  2. xrandr --addmode eDP-1 SMOL
  3. xrandr --output eDP-1 --fb 1920x980 --panning 1920x980 --mode SMOL
  4. xrandr --fb 1920x980 --output eDP-1 --mode 1920x1080 --transform 1,0,0,0,1,-100,0,0,1 --panning 1920x980 --fb 1920x980

Обратите внимание, что я использовал --fbдо и после вывода. Странно, только потом переместил "вьюпорт" в низ экрана.

0
26.10.2020, 21:35
2 ответа

Если вы действительно можете использовать HTTP/0.9, то это вам подойдет

printf '%s\r\n\r\n' 'GET my_file' | openssl s_client -connect <my_ip:my_port>
1
18.03.2021, 22:54

openssl s_client не является особенно хорошим инструментом для этого, но это можно сделать. Давайте разобьем это на две части. Во-первых, сделать HTTP-запрос, а во-вторых, извлечь контент из ответа.

Выполнение HTTP-запроса

Самое сложное здесь то, что s_clientзакрывает соединение, когда его стандартный ввод закрывается. Поэтому вам нужно держать стандартный ввод открытым, пока соединение не будет закрыто. Основываясь на этом ответе ServerFault , вы можете сделать что-то вроде:

(printf "GET $PATH HTTP/1.0\r\nHost: $HOST\r\n\r\n"; sleep 10) | \
    openssl s_client -connect $HOST:443 -quiet) > /tmp/output.tmp

Здесь есть несколько больших ограничений. Во-первых, вам нужно установить достаточное время для sleep, чтобы передача могла завершиться. Но не так долго, чтобы ждать вечно. Во-вторых, отсутствует обработка перенаправления, поэтому вам нужен URL-адрес, который будет обслуживать данные непосредственно по запрашиваемому вами URL-адресу, а не 302перенаправлять вас куда-то еще.

Извлечение данных

Теперь у вас есть /tmp/output.tmpответ HTTP, который включает ваши данные и некоторые заголовки. Удалить заголовки сложнее, чем кажется, потому что у вас может быть смесь символов новой строки \r\nи \nи вы можете передавать двоичные данные.

Если ваш файл представляет собой текст в стиле Unix (, например, сценарий оболочки ), вы можете избавиться от всех символов \rи удалить все до первой пустой строки включительно:

tr -d '\r' < /tmp/output.tmp | sed '1,/^$/d' > /tmp/output

Если ваш файл двоичный (, например, исполняемый файл ), вы не можете просто удалить символы \r. Предполагая, что первые несколько байтов вашего файла довольно уникальны (, скажем, \xF7ELFв этом примере ), и предполагая, что у вас есть GNU grep, вы можете сделать что-то вроде этого:

SKIP=$(grep -aboF "$(printf "\xf7ELF")" output | head -1 | awk -F: '{print $1}')
dd ibs=1 if=/tmp/output.tmp of=/tmp/output skip=$SKIP
0
18.03.2021, 22:54

Теги

Похожие вопросы