Timeout client DownloadFile

di il
8 risposte

Timeout client DownloadFile

                'ora preleviamo la favicon dal sito
                Dim faviconsPath As String = Application.StartupPath & "\Favicons"
                If Not Directory.Exists(faviconsPath) Then Directory.CreateDirectory(faviconsPath)
                Dim client = New WebClient()
                Dim remoteUri As String = stringaHRef
                nomeFile = faviconsPath & "\" & dns & estensioneIco
                Try
                    client.DownloadFile(remoteUri, nomeFile)
                Catch ex As WebException
                    GoTo continua
                End Try

Scusatemi se intervengo ancora una volta, ma sono alle prese con una operazione per me complessa: il download delle favicon mentre registro la cronologia e/o i preferiti. Ho scoperto ora che il sito del ministero degli esteri (https://www.esteri.it/it ) pur prevedendo una immagine (ministero_affari_esteri_logo-1.png) non la scarica. Anche Edge non la registra nè nella cronologia nè nei preferiti.

 <link rel="icon" href="https://www.esteri.it/wp-content/uploads/2021/11/ministero_affari_esteri_logo-1.png" sizes="32x32">

Il problema è come evitare che il tentativo di client.DownloadFile(remoteUri, nomeFile) di scaricare l'immagine duri qualche secondo e non tre minuti!!! Che il browser rimanga bloccato per un tempo irragionevole non è evidentemente praticabile.

C'è qualcuno che sappia indirizzarmi sul come far passare il controllo sulla webexception dopo 3-5 secondi?

Grazie mille.

8 Risposte

  • Re: Timeout client DownloadFile

    Ciao,

    mi sfugge una cosa… in dns cosa hai ? in estensioneIco cosa hai ? 

    nomeFile = faviconsPath & "\" & dns & estensioneIco

    se nomeFile per esempio è = c:\YouFolder\YouDnsYouestensioneIco

    sicuramente non è un nome file valido… mancherebbe il punto separatore per l'estensione

    Quindi per esempio dovrebbe essere così?

    nomeFile = faviconsPath & "\" & dns & "." & estensioneIco

    pertanto se nomeFile per esempio è = c:\YouFolder\YouDns.YouestensioneIco
    quindi = c:\YouFolder\YouDns.png … allora sarebbe un nome file valido

    Dovresti far capire bene il contenuto di certe variabili, altrimenti si entra solo nel campo dell'ipotesi.

    Comunque la mia solo una domanda per capire meglio.

  • Re: Timeout client DownloadFile

    02/12/2023 - By65Franco ha scritto:


    nomeFile = faviconsPath & "\" & dns & "." & estensioneIco

    Ciao,ByFranco65 e ,sopratutto, grazie.

    Beh, hai ragione. In effetti,dall'esterno,non è comprensibile.

    La stringa è : 

    faviconPath ( Dim faviconsPath As String = Application.StartupPath & "\Favicons")

    dns(Dim dns As String = wv.Source.DnsSafeHost) (esempio:www.iprogrammatori.it)

    estensioneIco(stringaHRef.Substring(FineNomeFile, 4) : legge gli ultimi 4 crt della stringa, che contiene l'estensione del file ,compreso il carattere “.”), che -in ultima analisi, si traduce in :

    www.iprogrammatori.it.ico

  • Re: Timeout client DownloadFile

    Ciao,

    ok… capito adesso

    Pertanto non se non riscontri errori di sintassi a questo punto puoi gestire un timeout per la classe WebClient

    Esempio:
    ' Ora preleviamo la favicon dal sito
    Dim faviconsPath As String = Application.StartupPath & "\Favicons"
    If Not Directory.Exists(faviconsPath) Then Directory.CreateDirectory(faviconsPath)
    
    Dim client As New WebClient()
    Dim remoteUri As String = stringaHRef
    nomeFile = faviconsPath & "\" & dns & estensioneIco
    
    ' set timeout: es. 10 ss
    client.Timeout = 10000
    Try
       client.DownloadFile(remoteUri, nomeFile)
    Catch ex As WebException
       GoTo continua
    End Try

    Per esempio allo scadere dei 10 secondi verrà generata una eccezione in WebException per la quale puoi gestire il tuo processo e decidere come proseguire.
    Prova a provare se ti soddisfa…

  • Re: Timeout client DownloadFile

    02/12/2023 - By65Franco ha scritto:


    client.Timeout = 10000

    Ciao.

    Allora, client non accetta Timeout. Ci avevo sperato, anche perchè ogni mio ulteriore tentativo è stato proprio INUTILE!!!!

    Ho provato anche questa:

    NomeFile="c:\archivio\esteri.pgn", false, 10000)
    client.DownloadFile(remoteUri, nomeFile)

    Che faccio? mi arrendo! E' solo un sito (www.esteri.it) a farmi questo scherzo e considerato che lo faccio per passatempo, sono soddisfatto per tutto il lavoro compiuto sin qui.

    Da domani mi dedicherò ad altro. Basta con webWiev2!

    Buona serata By65Franco.

  • Re: Timeout client DownloadFile

    Come hai già visto il WebClient non ha la proprietà Timeout accessibile.
    Puoi risolvere il problema creando una classe derivandola dal WebClient e poi gestire il tutto, su internet trovi qualcosa già fatto.

    Io però cercherei di risolvere il problema del download, che secondo me dipende dal protocollo https utilizzato dal sito.

    Nel tuo Form main, nell'evento Load metti queste due linee proprio per prime, poi riprova a fare client.DownloadFile

    System.Net.ServicePointManager.SecurityProtocol = CType(3072, Net.SecurityProtocolType) ' TLS 1.2
    System.Net.ServicePointManager.ServerCertificateValidationCallback = Function(senders, certificate, chain, sslPolicyErrors) True
  • Re: Timeout client DownloadFile

    Non funziona,SirJo! Grazie mille per il tuo intervento.

    Avevo provato anche così ,ma con zero risultati.

    Non posso affrontare una situazione che è molto, ma molto al di là delle mie capacità,SirJo! 

                   'ora preleviamo la favicon dal sito
                   Dim faviconsPath As String = Application.StartupPath & "\Favicons"
                   If Not Directory.Exists(faviconsPath) Then Directory.CreateDirectory(faviconsPath)
                   Dim client = New WebClient()
                   Dim remoteUri As String = stringaHRef
                   nomeFile = (faviconsPath & "\" & dns & estensioneIco)
                   Try
                       System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls
                       System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls11
                       System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12
                       client.DownloadFile(remoteUri, nomeFile)
                   Catch ex As WebException
                       GoTo continua
                   End Try
               End If
           End If
    continua:
  • Re: Timeout client DownloadFile

    Prova così, vedrai che ora funziona:

    Dim client = New WebClient
    client.Headers(HttpRequestHeader.UserAgent) = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0"
    client.DownloadFile("https://www.esteri.it/wp-content/uploads/2021/11/ministero_affari_esteri_logo-1.png", My.Computer.FileSystem.SpecialDirectories.Desktop & "\icon.png")
  • Re: Timeout client DownloadFile

    [RISOLTO]

    SirJo. Ho avuto da te sempre le soluzioni ai miei (grandi,per me!!) problemi.

    Complimenti. Funziona perfettamente!!! Grazieeee.

Devi accedere o registrarti per scrivere nel forum
8 risposte