Definir data e hora do cabeçalho http no roteador com curl ou wget

1

Esta técnica deve ser semelhante ou a mesma que no Ubuntu; embora o código a seguir não funcione no roteador. Um método é o seguinte:

dateFromServer=$(curl -v --silent https://google.com/ 2>&1 \
 | grep Date | sed -e 's/< Date: //')
date +"%d%m%Y%H%M%S" -d "$dateFromServer"

O resultado é

'ate: invalid date 'Sat, 12 May 2018 18:49:18 GMT

ou obtenha a data de um cabeçalho de resposta HTTP. Remova a desordem. Definir a data.

date -s 'curl -I 'https://startpage.com/' 2>/dev/null | grep -i '^date:' | sed 's/^[Dd]ate: //g''

Os resultados que obtenho são os seguintes:

@Heyzeus:/tmp/home/root# date -s 'curl -I 'https://google.com/' 2>/dev/null | grep -i '^date:' | sed 's/^[Dd]ate: //g'' BusyBox v1.25.1 (2018-05-06 13:19:15 EDT) multi-call binary.

Usage: date [OPTIONS] [+FMT] [TIME]

Display time (using +FMT), or set time

[-s,--set] TIME Set time to TIME
-u,--utc Work in UTC (don't convert to local time)
-R,--rfc-2822 Output RFC-2822 compliant date string
-I[SPEC] Output ISO-8601 compliant date string SPEC='date' (default) for date only, 'hours', 'minutes', or 'seconds' for date and time to the indicated precision
-r,--reference FILE Display last modification time of FILE
-d,--date TIME Display TIME, not 'now'
-D FMT Use FMT for -d TIME conversion

Recognized TIME formats: hh:mm[:ss] [YYYY.]MM.DD-hh:mm[:ss] YYYY-MM-DD hh:mm[:ss] [[[[[YY]YY]MM]DD]hh]mm[.ss] 'date TIME' form accepts MMDDhhmm[[YY]YY][.ss] instead

Outra

date -s "$(wget -qSO- --max-redirect=0 startpage.com 2>&1 | grep Date: | cut -d' ' -f5-8)"

results in: date: invalid date '13 May 2018 22:46:44'

O tempo extraído dos dois primeiros resultados é, por exemplo: "Sáb, 12 de maio de 2018 18:49:18 GMT" e data-s requer algo mais como 2018-05-12 18:49:18 Ou conforme listado em "formatos de horário reconhecidos".

Está perto. Mas "Sat" precisa ser removido, o mês precisa ser substituído por um número e, em seguida, organizado adequadamente; Se isso pudesse ser feito exclusivamente em um único comando de terminal, isso seria ótimo.

    
por Tyler 13.05.2018 / 02:07

1 resposta

0

Graças a Twiglets

Aqui está uma alternativa que define a data !!! opção [-s]. Imprime a data em que recupera & a "Data" definida para comparação.

Isso funciona no AsusWRT / Merlin, a única coisa estranha é que a data recuperada é ".... GMT" e o utilitário date configura a hora correta, mas altera para "... DST" Ambiente tem TZ definido como "GMT"

datetext=$(curl -I 'https://1.1.1.1/' 2>/dev/null | grep "Date:" |sed 's/Date: [A-Z][a-z][a-z], //g'| sed 's/\r//') ; echo "Date Retrieved = $datetext" ; echo -n "Date set = " ; date -s "$datetext" -D'%d %b %Y %T %Z'
    
por Tyler 14.05.2018 / 23:16