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
- Questo topic ha 7 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 2 anni, 3 mesi fa da
Sergio Bertana.
-
AutorePost
-
Gennaio 10, 2023 alle 5:03 pm #69174
Chiara
PartecipanteDato 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
Gennaio 10, 2023 alle 5:33 pm #69179Sergio Bertana
Amministratore del forumIl 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>
Gennaio 11, 2023 alle 3:25 pm #69228Sergio Bertana
Amministratore del forumAggiungo 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.
Gennaio 12, 2023 alle 9:02 am #69236Chiara
PartecipanteGrazie 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?
Gennaio 12, 2023 alle 4:00 pm #69245Chiara
PartecipantePosso 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.
Gennaio 12, 2023 alle 6:22 pm #69250Sergio Bertana
Amministratore del forumDa 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.
Gennaio 13, 2023 alle 8:43 am #69264Chiara
PartecipanteGrazie della risposta, ma lo stato si può leggere con:
"PLC_DO" : [<!--[OSID_PLC_DO_ALL]-->] "PLC_DI" : [<!--[OSID_PLC_DI_ALL]-->]
Gennaio 13, 2023 alle 11:04 am #69285Sergio Bertana
Amministratore del forumI 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.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.