Oppure

Loading
02/02/23 23:01
Giacos71
Postato originariamente da Carlo:

Purtroppo non so perché da .Net anche con il protocollo Tls12 il certificato per scaricare igt.it/STORICO_ESTRAZIONI_LOTTO/… non è valido, speriamo che qualcuno ce lo spieghi.
Personalmente non ho problemi da .Net a scaricare files da altri siti o dai miei con il protocollo Tls12

Non capisco nemmeno io ed internet sembra ci siano poche informazioni a riguardo, non capisco se l certificato dipenda da me o dal server. Comunque ho scoperto che una volta immesso il link in questo caso igt.it/ e facendo clck sul lucchetto nella barra degli indirizzi compare un men dal quale si può esportare il certificato (igt.cert). Però non so se si può passare questo certificato al programma per poter dialogare in modo corretto e sicuro col server. Se fosse che si può si potrebbe creare una procedura che verifica se chiede un certificato x e lo usa nell'applicazione, anche perchè penso che il certificato non sia uguale per tutti. Almeno questa è l'idea.

Ho scritto due righe che ti potrebbero tornare utili.

Alla faccia delle due righe! E ben molto di più, di questo te ne sono grato anche se io volevo fare funzionare il mio e il fatto che non ci sia riuscito mi fa rabbia. Da quanto ho capito il codice che mi hai messo scarica le estrazioni dal link che mi hai messo tu e le accoda nel file scaricato (a mano e unzippato) dal sito che voglio io giusto? Certo che hai fatto un lavoraccio (nel senso) grande, e tutto questo per scaricare un file. Non voglio sembrare un chiede codice come almercato (giàavuto esperienza in un post precedente), difatti il mio obbiettivo era quello di riuscire a scaricare il file zip. Comunque grazie.

Metti nella caretella C:\Downloads\ il file Storico.txt scaricato da igt e dezippato a mano.
Lancia il programma DownloadArchivio.exe dopo averlo estratto dallo zip allegato qui sotto.

Il programma cerca nel file Storico.txt l'ultima data presente e ne usa l'anno per scaricare da lottologia il file ArchivioAAAA.txt corrispondente.
Scaricato il file ArchivioAAAA.txt, le date non presenti in Storico.txt verranno aggiunte con la giusta formattazione.

Il programma è anche capace di scaricare più anni, puoi provare cancellando alcune estrazioni da Storico.txt

ATTENZIONE Non controlla se nella data ci sono tutte le estrazioni, se cancelli delle estrazioni da "Storico.txt" lo devi fare sempre dall'estrazione di BA in poi, Il file Storico.txt deve sempre terminare con l'estrazione di VE e suoi estratti, non deve contenere righe vuote alla fine.

Il programma in una listbox annota tutte le fasi, utile per capire il progresso e il contenuto delle variabili, il punto esclamativo indica che si può procedere, il punto interrogativo indica un errore e il programma termina.

Aggiungo il codice completo, la listbox viene aggiunta in runtime
Imports System.Net
Imports System.IO

Public Class Form1

    Dim lB As New ListBox
    Dim storico As List(Of String)
    Dim percorsoStorico As String = "C:\Downloads\Storico.txt"
    Dim diffAnno As Integer
    Dim ultimaData As Date

    Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
        lB.Dock = DockStyle.Fill
        Me.Controls.Add(lB)
        If File.Exists(percorsoStorico) Then
            lB.Items.Add("! trovato " & percorsoStorico)
            storico = File.ReadAllLines(percorsoStorico).ToList
            lB.Items.Add("! caricato in lista storico: " & percorsoStorico)
            Dim indiceUltimaData As Integer

            Do ' accoda un anno o più
                indiceUltimaData = storico.Count - 1
                If storico.Last.Length > 10 AndAlso Date.TryParse(storico.Last.Substring(0, 10), ultimaData) Then
                    lB.Items.Add("! ultima data in Storico.txt = " & ultimaData.ToShortDateString & " Riga: " & indiceUltimaData) : lB.Refresh()
                Else
                    lB.Items.Add("? L'ULTIMA RIGA E' VUOTA E/O NON CONTIENE UNA DATA")
                    Exit Sub
                End If
                aggiungi()
                diffAnno = 1 ' passa al prossimo anno
                ' visualizzo le estrazioni accodate, utile per controlli
                For i = indiceUltimaData + 1 To storico.Count - 1
                    lB.Items.Add("! Add " & storico(i))
                Next
            Loop While Today.Year > ultimaData.Year ' esce per eccesso di anno senza incremento
        Else
            lB.Items.Add("? " & percorsoStorico & " NON ESISTE")
            Exit Sub
        End If

        File.WriteAllLines(percorsoStorico, storico)
        lB.Items.Add("! Storico aggiornato " & percorsoStorico & " con " & storico.Count & " righe")
        lB.TopIndex = lB.Items.Count - 1 ' rende visibile l'ultima riga
    End Sub

    Sub aggiungi()
        If Today.Year < ultimaData.Year + diffAnno Then Exit Sub ' esce per eccesso di anno con incremento
        Dim archivio As List(Of String)
        Dim source As String = "https://www.lottologia.com/lotto/archivio-estrazioni/?as=TXT&year=" & (ultimaData.Year + diffAnno).ToString
        Dim destinazione As String = Path.Combine(Path.GetDirectoryName(percorsoStorico), "Archivio" & (ultimaData.Year + diffAnno).ToString & ".txt")
        lB.Items.Add("! carico archivio: " & source) : lB.Refresh()
        Me.Cursor = Cursors.WaitCursor
        Using client As New WebClient()
            Try
                ServicePointManager.Expect100Continue = True
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 Or SecurityProtocolType.Tls Or SecurityProtocolType.Tls11 Or SecurityProtocolType.Ssl3
                client.DownloadFile(source, destinazione)
                lB.Items.Add("! " & destinazione & " ***SALVATO***") : lB.Refresh()
            Catch er As Exception
                lB.Items.Add("? " & er.Message)
                Exit Sub
            End Try
        End Using
        Me.Cursor = Cursors.Default
        archivio = File.ReadAllLines(destinazione).ToList
        Dim indice As Integer ' conterrà la posizione della prima estrazione su archivio da accodare su storico
        If diffAnno = 0 Then ' primo anno accodato anche parziale
            lB.Items.Add("! caricato in lista archivio: " & destinazione)
            lB.Items.Add("! cerco la data " & ultimaData & " in  " & destinazione) : lB.Refresh()
            Dim dataArchivio As Date
            ' cerca la data
            For indice = 2 To archivio.Count - 1
                If archivio(indice).Length > 10 AndAlso Date.TryParse(archivio(indice).Substring(0, 10), dataArchivio) Then
                    If dataArchivio = ultimaData Then
                        lB.Items.Add("= SI  : " & dataArchivio.ToShortDateString)
                        Exit For ' data trovata
                    Else
                        lB.Items.Add("= NO: " & dataArchivio.ToShortDateString) : lB.Refresh()
                    End If
                End If
            Next indice
            If dataArchivio <> ultimaData Then
                lB.Items.Add("? la data: " & ultimaData.ToShortDateString & " in " & destinazione & " NON ESISTE")
                Exit Sub
            End If
        Else ' anni successivi accodati su storico sempre dall'inizio
            indice = archivio.Count - 1
            lB.Items.Add("! aggiungo anno: " & (ultimaData.Year + diffAnno).ToString)
            lB.TopIndex = lB.Items.Count - 1 ' rende visibile l'ultima riga
            lB.Refresh()
        End If
        ' aggiungo le estrazioni con la formattazione di www.igt.it
        For i = indice - 1 To 0 Step -1
            Dim diviso() As String = archivio(i).Split(vbTab)
            Dim dataDivisa As Date
            If Date.TryParse(diviso(0), dataDivisa) Then
                storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "BA" & vbTab & diviso(1) & vbTab & diviso(2) & vbTab & diviso(3) & vbTab & diviso(4) & vbTab & diviso(5))
                storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "CA" & vbTab & diviso(6) & vbTab & diviso(7) & vbTab & diviso(8) & vbTab & diviso(9) & vbTab & diviso(10))
                storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "FI" & vbTab & diviso(11) & vbTab & diviso(12) & vbTab & diviso(13) & vbTab & diviso(14) & vbTab & diviso(15))
                storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "GE" & vbTab & diviso(16) & vbTab & diviso(17) & vbTab & diviso(18) & vbTab & diviso(19) & vbTab & diviso(20))
                storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "MI" & vbTab & diviso(21) & vbTab & diviso(22) & vbTab & diviso(23) & vbTab & diviso(24) & vbTab & diviso(25))
                storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "NA" & vbTab & diviso(26) & vbTab & diviso(27) & vbTab & diviso(28) & vbTab & diviso(29) & vbTab & diviso(30))
                storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "PA" & vbTab & diviso(31) & vbTab & diviso(32) & vbTab & diviso(33) & vbTab & diviso(34) & vbTab & diviso(35))
                storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "RM" & vbTab & diviso(36) & vbTab & diviso(37) & vbTab & diviso(38) & vbTab & diviso(39) & vbTab & diviso(40))
                storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "RN" & vbTab & diviso(51) & vbTab & diviso(52) & vbTab & diviso(53) & vbTab & diviso(54) & vbTab & diviso(55))
                storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "TO" & vbTab & diviso(41) & vbTab & diviso(42) & vbTab & diviso(43) & vbTab & diviso(44) & vbTab & diviso(45))
                storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "VE" & vbTab & diviso(46) & vbTab & diviso(47) & vbTab & diviso(48) & vbTab & diviso(49) & vbTab & diviso(50))
            End If
        Next i
    End Sub
End Class

Sulle estrazioni aggiunte i numeri minori di 10 contengono lo zero davanti (non ti dovrebbe cambiare nulla)
Il file Storico.txt quando risalvato contiene CrLf a fine riga (non ti dovrebbe cambiare nulla)
Ho cercato di prevedere i possibili scenari, ma sicuramente mi è sfuggito qualcosa, sta a te verificare.

Spero che ti sia utile.

EDIT: Ho corretto un errore

PS. meno parole che non riguardano il codice ci sono e meglio è...

Se ti riferisci che ho scritto troppe parole e poco codice chiedo scusa ma mi dovevo pure spiegare, se invece ti riferisci a nessuno che si permette di giudicarmi mi spiace ma non mi sta bene. Io dico solo se non condividi le mie idee o non ti va di aiutarmi semplicemente ignorami, se invece semplicimente entri per farmi le tue osservazioni personali mi spiace ma proprio no. Anche perchè se io voglio creare un piccola applicazione per il gioco del lotto non voglio proprio obbligare nessuno a seguirmi o credere alle mie ideologie. Io voglio semplicemte risolve un mio problema di programmazione e ho chiesto aiuto. Poi se vuole uno mi aiuta oppure no, di certo non mi offendo. Anche perchè questa sarebbe la seconda volta, non sarebbe più semplice ignorarmi? Dicerto non sono arrivato alla tenera eta di 52 anni per farmi mancare di rispetto da nessuno, e io non ha dato fastidio a nessuno!

Bene ora chiudo qua il discorso e se ho frainteso ho offeso qualcuno chiedo scusa.
aaa
03/02/23 0:17
Carlo
Il file da igt lo scarichi una volta poi non lo fai più, è inutile riscaricarlo visto che è sempre uguale, deve essere solo aggiornato.
Il programma che ti ho proposto te lo aggiorna in automatico. :yup:
Dimmi se ti funziona. :k:

Per il Tls12, non ci ho guardato perché il problema l'ho riscontrato solo con il link che hai proposto :-?, ribadisco l'invito ad aiuti autorevoli.
Ultima modifica effettuata da Carlo 03/02/23 21:13
in programmazione tutto è permesso
03/02/23 7:33
Thejuster
Ben detto.
Cmq non sò che problema avete voi, ma a me il file lo scarica senza problemi.


semplicemente usando

WebClient wb = new WebClient();
            wb.DownloadFile("https://www.lottologia.com/lotto/archivio-estrazioni/?as=TXT&year=2022", "prova.txt");




Assicuratevi di aver aggiornato il vostro Framework.
Attualmente siamo al 4.8 e Net6 (Core)

mire.forumfree.it/ - Mire Engine
C# UI Designer
03/02/23 8:25
@Carlo ... la provocazione inutile è stata

"Lo so molti storceranno il naso ma il lotto a me piace"

e dato che sono uno di quelli che (anche in firma) notoriamente non amo affatto lo sforzo pseudoscientifico applicato alla sorte, ho solo risposto. Rimango della mia idea e non dico altro ma, per favore, mettiamo gli eventi nel giusto ordine.

Detto questo, quel sito adesso non risponde, quindi fare delle prove è fuorviante.
Inoltre, il TLS 1.2 (e comunque il protocollo SSL/TLS) viene gestito correttamente dalla versione 4.5 in poi.
Se si usa una versione di Framework precedente, si hanno problemi.
Ultima modifica effettuata da 03/02/23 8:26
03/02/23 13:09
Thejuster
No.
Non viene gestito da quella versione.
Viene gestito dal 4.6 in poi che include l'aggiornamento del webservices. ;)
mire.forumfree.it/ - Mire Engine
C# UI Designer
03/02/23 18:29
Giacos71
Postato originariamente da Thejuster:

No.
Non viene gestito da quella versione.
Viene gestito dal 4.6 in poi che include l'aggiornamento del webservices. ;)


Infatti il mo progetto ha ilframework 4.5 forse il max che vede da impostare nel progetto è la 4.6.

Ma non è possibile con codice e su cui io non sono molto ferrato aggirare il problema ho visto che in System.Net.Security esiste la clase sslstream però francamente nn so se risolverebbe il problema.
aaa
03/02/23 18:33
Postato originariamente da Thejuster:

No.
Non viene gestito da quella versione.
Viene gestito dal 4.6 in poi che include l'aggiornamento del webservices. ;)


.NET 4.0 supports up to TLS 1.0 while .NET 4.5 supports up to TLS 1.2

Sicuro?

However, an application targeting .NET 4.0 can still support up to TLS 1.2 if .NET 4.5 is installed in the same environment. .NET 4.5 installs on top of .NET 4.0, replacing System.dll.

I've verified this by observing the correct security protocol set in traffic with fiddler4 and by manually setting the enumerated values in a .NET 4.0 project:

ServicePointManager.SecurityProtocol = (SecurityProtocolType)192 |
(SecurityProtocolType)768 | (SecurityProtocolType)3072;
Reference:

namespace System.Net
{
[System.Flags]
public enum SecurityProtocolType
{
Ssl3 = 48,
Tls = 192,
Tls11 = 768,
Tls12 = 3072,
}
}


//////////

Comunque adesso il sito risponde correttamente (al contrario di questa mattina) e quindi funziona tutto regolarmente e il file viene scaricato con le due linee


WebClient wb = new WebClient(); wb.DownloadFile("lottologia.com/lotto/archivio-estrazioni/;, "prova.txt";);
Ultima modifica effettuata da 03/02/23 18:44
03/02/23 18:53
Carlo
Si il Tls12 è da un po' che è stato implementato, il Tls13 dal Framework 4.8.

@ Thejuster.
@ nessuno.
Il file che hai scaricato non ha bisogno di SSL/TLS, il link che da problemi é questo, anche se si mettono tutti i protocolli:
WebClient wb = new WebClient();
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls13 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Ssl3;

wb.DownloadFile("https://www.igt.it/STORICO_ESTRAZIONI_LOTTO/storico.zip", "prova.txt");


@ nessuno.
scrivere SecurityProtocolType.Tls12; oppure (SecurityProtocolType)3072; è la stessa cosa, solo che nei framework vecchi la costante Tls12 che vale 3072 non esiste ma con la seconda istruzione si può inserire il valore corrispondente.

Se avete qualche idea in merito comunque mi piacerebbe capire quale sia il problema, anche perché non so se igt.it stia troppo indietro ed allora devono sistemare, oppure stia troppo avanti e tra qualche tempo il problema si amplierà, mano mano che i siti si aggiorneranno.:asd:
Ultima modifica effettuata da Carlo 03/02/23 20:05
in programmazione tutto è permesso