Vai al contenuto

Utilizzo di cURL per accedere a pagine web di SlimLine

Home Forum Controllori SlimLine e Netsyst (LogicLab) Utilizzo di cURL per accedere a pagine web di SlimLine

Stai visualizzando 8 post - dal 1 a 8 (di 8 totali)
  • Autore
    Post
  • #69174
    Chiara
    Partecipante

    Dato un qualsiasi programma su un sistema SlimLine, definite variabili mappate:

    VAR_GLOBAL
        Var1 AT %MW100.10 : UINT;
        Var2 AT %MW100.12 : UINT;
        Var3 AT %MW100.2200 : UINT;
    END_VAR

    Inserita una pagina custom es. Values.htm (il cui contenuto punta a VAR3 <!–[‘%d’, USINT, 2200]–>) posso cambiare i valori di VAR1 e VAR2 con:

    curl -v -X GET "http://IPPLC/webpages/user/Values.htm?USINT+10=8&USINT+12=7"

    Mi aspetterei in uscita il valore di Var3, invece mi ritorna:

    *   Trying IPPLC:80...
    * Connected to IPPLC (IPPLC) port 80 (#0)
    * Server auth using Digest with user 'Admin'
    > GET /webpages/user/Values.htm HTTP/1.1
    > Host: 10.7.208.158 > User-Agent: curl/7.85.0 > Accept: */*
    > * Mark bundle as not supporting multiuse
    < HTTP/1.1 302 Found
    < Server: Elsist CPU module
    < Location: /Login.html
    < Transfer-Encoding: chunked
    < Connection: close
    * Closing connection 0
    #69179
    Sergio Bertana
    Amministratore del forum

    Il concetto è corretto ma probabilmente la pagina che richiedi in cURL è in una cartella accessibile solo da un utente loggato. Quando accedi da browser prima ti viene richiesta l’autenticazione e poi accedi alla pagina. Se noti la risposta contiene un codice 302 che è una ridirezione verso la pagina di login.  Ho fatto il programma di esempio cURLExample (Download) dove nel programma LogicLab ho dichiarato 3 variabili globali:

    VAR_GLOBAL
        Var1 AT %MW100.10 : UINT;
        Var2 AT %MW100.12 : UINT;
        Var3 AT %MW100.2048 : UINT;
    END_VAR

    Ed una pagina web così definita:

    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>SlimLine - Simple page</title>
    <style type="text/css">
    body {font-family: Arial, Helvetica, sans-serif; font-size: 18px; font-style: normal;}
    </style>
    </head>
    <body>
    This page is served by the <b>SlimLine</b><br>
    Var3:<!--["%d", UINT, 2048]-->
    </body>
    </html>

    Ho caricato la pagina con il nome Values.htm in C:\Web, la cartella C:\Web come vedi dallo screenshot è accessibile in lettura anche da utente anonimo, quindi con il comando cURL:

    curl "http://192.168.0.181/Values.htm?UINT+10=8&UINT+12=20"

    Valorizzo Var1=8 e Var2=20 e mi viene ritornata la pagina con il valore di Var3 che essendo allocata in DB100.2048 ha il valore mantenuto in backup allo spegnimento del sistema.

    C:\Windows\system32>curl "http://192.168.0.181/Values.htm?UINT+10=8&UINT+12=20"
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>SlimLine - Simple page</title>
    <style type="text/css">
    body {font-family: Arial, Helvetica, sans-serif; font-size: 18px; font-style: normal;}
    </style>
    </head>
    <body>
    This page is served by the <b>SlimLine</b><br>
    Var3:208
    </body>
    </html>
    #69228
    Sergio Bertana
    Amministratore del forum

    Aggiungo esempio per utilizzare cURL con l’autenticazione in m odo da poter accedere anche a pagine memorizzate in cartelle accessibili solo da utenti loggati.

    Il meccanismo di login utilizza i cookies per riconoscere l’utente, quindi la prima operazione è eseguire il login sul sistema abilitando il salvataggio in un file dei cookies ritornati. Il comando:

    curl -c "C:\Cookie" "http://192.168.0.181/SysCgi/Login.cgi?Username=Admin&Password=Admin&Action=Login"

    Esegue il login sul sistema con credenziali Admin:Admin, salvando i cookies ritornati nel file C:\Cookie. Ora se ai comandi cURL forniamo il file di cookies il sistema riconoscerà l’utente e ne abiliterà l’accesso. Quindi ipotizzando che la nostra pagina Values.htm sia ora trasferita nella cartella C:\Web\webpages del sistema, ecco che potremmo accedervi con il comando:

    curl -b "C:\Cookie" "http://192.168.0.181/webpages/Values.htm?UINT+10=8&UINT+12=20"

    Nei vari comandi possiamo aggiungere il parametro -v se desideriamo avere un ritorno verbose dell’operazione eseguita.

    L’autenticazione ha un tempo di vita sul sistema, quindi se si continuano ad eseguire accessi, la vita viene automaticamente rinfrescata, nel caso in cui non vi siano accessi dopo circa 1 minuto la sessione scade ed occorre nuovamente effettuare il login.

    #69236
    Chiara
    Partecipante

    Grazie per l’esempio e i chiarimenti, quindi l’autenticazione ha effetto solo in lettura, non sarebbe più corretto ignorare anche le richieste per  eseguire il cambio valore se non si è autenticati?

    #69245
    Chiara
    Partecipante

    Posso chiedere la sintassi corretta da usare nei files htm per leggere lo stato delle USCITE?

    "DO1": <!--["%d", BOOL, QX0.1]-->

    La tag DO1 con type: BOOL e address %QX0.1 nel programma plc mostra correttamente lo stato, mentre su html il valore è vuoto.

    #69250
    Sergio Bertana
    Amministratore del forum

    Da pagina web non puoi accedere agli I/O del sistema puoi solo accedere a variabili allocate in DB100.

    Quindi se vuoi leggere gli ingressi o settare le uscite devi allocare variabili BOOL in DB100 e poi con un programma in ladder o in ST copiare lo stato degli I/O fisici sulle variabili allocate.

    #69264
    Chiara
    Partecipante

    Grazie della risposta, ma lo stato si può leggere con:

    "PLC_DO" : [<!--[OSID_PLC_DO_ALL]-->]
    "PLC_DI" : [<!--[OSID_PLC_DI_ALL]-->]
    #69285
    Sergio Bertana
    Amministratore del forum

    I TAGs “OSID_xxxx” son TAGs che utilizziamo per la gestione nostre pagine web di sistema.

    Non sono documentati in quanto pur funzionando ne sconsigliamo l’utilizzo perchè questo ci permette di modificarne la funzionalità a nostra discrezione senza impattare con eventuali utilizzi dei clienti.

Stai visualizzando 8 post - dal 1 a 8 (di 8 totali)
  • Devi essere connesso per rispondere a questo topic.