Come posso usare openssl per get i risultati delle richieste HTTP GET?

Devo usare openssl per eseguire alcune richieste GET HTTP in uno script di shell. La linea che sto usando per farlo in questo momento è mostrata di seguito. Questo analizza il contenuto di una risposta XML dei seguenti formati.

<Result>success</Result>

<Result>failure</Result>

 echo -e "GET /test HTTP/1.1\r\nHost:$(hostname)\r\n\r\n" | openssl 2>&1 s_client -quiet -connect server-url:443 | grep -o -P --color '(?<=Result\>).*(?=\</Result)' 

Questo funziona e restituisce la string "successo" o "fallimento" di conseguenza. Il problema che sto affrontando è che il command openssl non termina dopo aver fatto la richiesta GET ma invece siede in attesa di più input. Credo che questo sia dovuto all'implicato -ign_eof che impedisce la terminazione automatica causata dall'opzione -quiet . Ho provato ad usare l'opzione -no_ign_eof , ma che causa il command openssl a terminare prima che la richiesta GET abbia ricevuto una risposta in modo da non poter get il contenuto della risposta se lo uso.

Come posso modificare questo command in modo da poter passare la richiesta GET tramite stdin (necessaria perché voglio inserirlo in un ciclo) ma chiudere il command openssl dopo each richiesta?

  • script shell (KSH) + impostare il file su param & eseguire il test tra param e string
  • Imansible avviare uno script
  • Trascina il file tar.gz dal server FTP
  • identificare trust ssh tra più server in una networking
  • Mysqldump restituisce uno status?
  • Script non viene eseguito in Amministratore di dominio
  • Connettiti alla row di command MySQL senza bisogno di password di root
  • Come eseguire automaticamente uno script durante l'avvio del sistema in centos
  • One Solution collect form web for “Come posso usare openssl per get i risultati delle richieste HTTP GET?”

    Quello che dovresti realmente fare è utilizzare uno strumento progettato per il recupero di risorse Web, come il command GET curl , wget o libwww-perl. Se non è disponibile, è necessario che l'amministratore di sistema installi qualcosa di appropriato.

    Con quello fuori strada …

    Il command openssl non termina perché il server web non ha chiuso la connessione.

    Ricorda che per impostazione predefinita HTTP mantiene le connessioni aperte dopo each richiesta come ottimizzazione delle performance. Una volta terminata una richiesta, un'altra richiesta può essere inviata sulla stessa connessione, piuttosto che chiudere e riaprire una nuova connessione.

    Se si desidera istruire il server per chiudere la connessione invece, è ansible submit la Connection: close intestazione HTTP.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.