+ Rispondi al messaggio
Pagina 3 di 4 primaprima 1234 ultimoultimo
Visualizzazione dei risultati da 21 a 30 su 37

Automatizzare accesso a sito internet

  1. #21
    L'avatar di SirJo
    SirJo non  in linea Scolaretto
    Post
    50
    Like Inviati  
    5
    Like Ricevuti  
    2
    Ho controllato, e ho trovato che il WebExceptionStatus.ProtocolError corrisponde all'errore 401, non il 500

    Comunque, su un programma che avevo fatto per accedere al webservice della Motorizzazione, a volte ricevevo un errore 401 ma mi serviva comunque leggere il messaggio di errore mandato dal server, e quindi eccoti come facevo, prova anche tu a vedere se poi riesci a ricevere qualcosa.

            Dim soap = "quello che devo trasmettere in modalit POST"
            Dim req = DirectCast(WebRequest.Create(endpoint), HttpWebRequest)
            req.Method = "POST" ' qui eventualmente cambi in GET
            Dim dataB As Byte() = Encoding.UTF8.GetBytes(soap)
            req.ContentType = "text/xml; charset=utf-8"
            req.ContentLength = dataB.Length
    
            Dim str As Stream = Nothing
            Try
                str = req.GetRequestStream()
            Catch ex As WebException
                Return "ERRORE:" & Environment.NewLine & ex.Message
            End Try
    
            Dim res As WebResponse = Nothing
    
            str.Write(dataB, 0, dataB.Length)
            str.Close()
    
            ' leggo la risposta
            Try
                res = req.GetResponse
                str = res.GetResponseStream()
            Catch ex As WebException
                str = ex.Response.GetResponseStream()
                ' segnalo eventuale errore
            End Try
    
            Dim fp = New MemoryStream
            Dim buffer(100000) As Byte ' 100 KB
            Dim size As Integer = 0
    
            Do
                Dim read As Integer = 0
                Try
                    read = str.Read(buffer, 0, buffer.Length)
                Catch ex As WebException
                End Try
                If read = 0 Then Exit Do
                size += read
                fp.Write(buffer, 0, read)
            Loop
    
            Dim bff(size - 1) As Byte
            fp.Position = 0
            fp.Read(bff, 0, size)
            fp.Close()
            fp.Dispose()
    
            str.Close()
            res = Nothing
            req = Nothing
    
            Dim txt = System.Text.Encoding.UTF8.GetString(bff)
    
    praticamente la genialata su questa riga:
    str = ex.Response.GetResponseStream()

  2. #22
    Sn0rky non  in linea Scolaretto
    Post
    338
    Like Inviati  
    1
    Like Ricevuti  
    0
    grazie ma leggere lo stream dell'errore non mi porta vantaggi

    il bello che 2 codici praticamente identici, che usano lo stesso codice php, non vadano entrambi a buon fine solo perch c' quel beeeeeep di favicon.ico che viene richiamato dal server e solleva una eccezione... inutile ignorare l'eccezione perch nel frattempo sono uscito... devo trovare un escamotage...
    questo da errore 500
     Dim url As String = String.Format("https://wms.cartografia.agenziaentrate.gov.it/inspire/ajax/ajax.php?op=getGeomPart&prov=AQ&cod_com=A018&foglio=1&num_part=00002/&tkn={0}", TOKEN)
            Try
                Dim myWebClient As New System.Net.WebClient()
                System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12
                Dim myStream As System.IO.Stream = myWebClient.OpenRead(url)
                myWebClient.Dispose()
                Dim sr As New System.IO.StreamReader(myStream)
                COORDIN += sr.ReadToEnd()
                sr.Dispose()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub
    
    questo risponde correttamente
            Dim url As String = String.Format("https://wms.cartografia.agenziaentrate.gov.it/inspire/ajax/ajax.php?op=getDatiOggetto&lon={0}&lat={1}", LongEstX, LatNordY)
            Try
                Dim myWebClient As New System.Net.WebClient()
                System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12
                Dim myStream As System.IO.Stream = myWebClient.OpenRead(url)
                myWebClient.Dispose()
                Dim sr As New System.IO.StreamReader(myStream)
                CFM += sr.ReadToEnd()
                sr.Dispose()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
    
    non capisco se chi ha scritto quel codice lo abbia fatto apposta o un errore che se viene segnalato poi lo sistemano...


    e non capisco qual la logica che permette al browser di bypassare l'errore e mostrare il risultato (che nel primo caso una vera e propria stringa, nel secondo risponde con un file .php anche se un json)

  3. #23
    L'avatar di SirJo
    SirJo non  in linea Scolaretto
    Post
    50
    Like Inviati  
    5
    Like Ricevuti  
    2
    Purtroppo non ho ben chiaro tutto il meccanisco che c' sotto, ma comunque:
    1) prova a spostare myWebClient.Dispose() dopo la riga sr.Dispose()
    2) ho visto che la chiamata di tipo AJAX e questo potrebbe essere il problema, dato che non sempre si riesce a riprodurre il tutto con WebClient e simili.
    Da dove hai ricavato quella chiamata ??
    Sei sicuro che una chiamata GET e non una chiamata POST ??
    Le chiamate AJAX usano il CallBackFunction, e questo il browser lo gestisce senza problemi, mentre il WebClient no
    3) Sicuro che devi attivare esplicitamente TLS 1.2 ??
    Prova a togliere la riga

  4. #24
    Sn0rky non  in linea Scolaretto
    Post
    338
    Like Inviati  
    1
    Like Ricevuti  
    0
    faccio tutto quel che mi hai segnalato e ti dico, intanto ti ringrazio perch stai seguendo la mia crociata
    considera che:
    - ho recuperato codice funzionante dal mio precedente programma "v1" (quello che ora non funziona)
    - sempre nella "v1" usavo un webbrowser per captcha e token poi webclient per la ricerca vera e propria

    ne consegue che, o torno ad usare il webbrowser (il meno possibile) o trovo il modo di fargli credere che lo stia usando

  5. #25
    L'avatar di SirJo
    SirJo non  in linea Scolaretto
    Post
    50
    Like Inviati  
    5
    Like Ricevuti  
    2
    altra cosa che devi fare per simulare il webbrowser settare il user-agent sul webclient

  6. #26
    Sn0rky non  in linea Scolaretto
    Post
    338
    Like Inviati  
    1
    Like Ricevuti  
    0
    Quote Originariamente inviato da SirJo Visualizza il messaggio
    altra cosa che devi fare per simulare il webbrowser settare il user-agent sul webclient
    grazie, provo anche questo...
    comunque ho messo l'url di ricerca in un webbrowser e risponde correttamente a questo ultimo passaggio (mal che vada proseguo cos) dovr solo capire come evitare di fare una modifica al registro (nella prima versione obbligo l'utente ad effettuare una modifica al registro per evitare la comparsa della finestra di download e non mi piace!!)

  7. #27
    L'avatar di SirJo
    SirJo non  in linea Scolaretto
    Post
    50
    Like Inviati  
    5
    Like Ricevuti  
    2
    Quote Originariamente inviato da Sn0rky Visualizza il messaggio
    grazie, provo anche questo...
    comunque ho messo l'url di ricerca in un webbrowser e risponde correttamente a questo ultimo passaggio
    Quindi non un problema di cookie, ma potrebbe essere davvero un problema di user-agent

    nella prima versione obbligo l'utente ad effettuare una modifica al registro per evitare la comparsa della finestra di download e non mi piace!!
    Spiega spiega che sono curioso

  8. #28
    Sn0rky non  in linea Scolaretto
    Post
    338
    Like Inviati  
    1
    Like Ricevuti  
    0
    Quote Originariamente inviato da SirJo Visualizza il messaggio
    Quindi non un problema di cookie, ma potrebbe essere davvero un problema di user-agent
    in serata vedo di infilare nell'header tutto l'infilabile



    Spiega spiega che sono curioso
    l'ho trovato googlando e l'ho applicato al mio caso (ossia quando nella v1 dovevo ricevere il token)
        Private Function SetRegistery() As Boolean
            Try
                Using hklm = RegistryKey.OpenBaseKey(RegistryHive.ClassesRoot, RegistryView.Registry64)
                    Dim key As RegistryKey = hklm.OpenSubKey("MIME\Database\Content Type\application/json", True)
                    If key Is Nothing Then key = hklm.CreateSubKey("MIME\Database\Content Type\application/json")
                    key.SetValue("CLSID", "{25336920-03F9-11cf-8FD0-00AA00686F13}")
                    key.SetValue("Encoding", New Byte() {&H80, &H0, &H0, &H0})
                    key.Close()
                End Using
                Return True
            Catch ex As SecurityException
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
            Return False
        End Function
    
    per come detto, non un gran bel modo di gestire la cosa (anche perch una modifica da farni come amministratore...)

  9. #29
    Sn0rky non  in linea Scolaretto
    Post
    338
    Like Inviati  
    1
    Like Ricevuti  
    0
    nulla da fare... non sono ancora riuscito a saltarci fuori! tra l'altro mi sorto un dubbio anche riguardo al sistema che usavo nella v1... anche usando il webbrowser sulla versione che sto sviluppando non funziona allo stesso modo

  10. #30
    Sn0rky non  in linea Scolaretto
    Post
    338
    Like Inviati  
    1
    Like Ricevuti  
    0
    faccio un bel respiro e vediamo di ricapitolare, codice pulito da ridondanze e via, con questo codice recupero la stringa TOKEN:
     Dim PageUrl As String = "https://geoportale.cartografia.agenziaentrate.gov.it/age-inspire/srv/ita/Captcha?type=image&lang=it"
            Dim stringa As String = ""
            Dim newContainer As New Net.CookieContainer
            Try
                Dim request As HttpWebRequest = WebRequest.Create(PageUrl)
                newContainer.Add(CookieList)
                request.CookieContainer = newContainer
                Dim response As HttpWebResponse = request.GetResponse()
                For Each rCookie As Cookie In CType(response, Net.HttpWebResponse).Cookies
                    Dim Found As Boolean = False
                    For Each pCookie As Cookie In CookieList
                        If pCookie.Name = rCookie.Name Then
                            pCookie.Value = rCookie.Value
                            Found = True
                            Exit For
                        End If
                    Next
                    If Not Found Then
                        CookieList.Add(rCookie)
                    End If
                Next
                Dim tmpImage As Drawing.Image = System.Drawing.Image.FromStream(response.GetResponseStream())
                TokenPB.Image = tmpImage
                TokenPB.Visible = True
                request = WebRequest.Create(String.Format("https://geoportale.cartografia.agenziaentrate.gov.it/age-inspire/srv/ita/Captcha?type=check&captcha={0}", InputBox("Inserisci il CAPTCHA", "Inserisci il CAPTCHA")))
                request.CookieContainer = newContainer
                response = request.GetResponse()
                Dim Reader As IO.Stream = response.GetResponseStream()
                Dim Buffer(8127) As Byte
                Dim BytesRead As Int32
                stringa = System.Text.Encoding.Default.GetString(Buffer)
                BytesRead = Reader.Read(Buffer, 0, Buffer.Length)
                Do While BytesRead > 0
                    BytesRead = Reader.Read(Buffer, 0, Buffer.Length)
                    stringa = System.Text.Encoding.Default.GetString(Buffer)
                Loop
                Reader.Close()
                If Not stringa.Contains("{""result"":true,""token"":""") Then
                    MessageBox.Show(stringa, "ERRORE")
                    Return
                End If
                stringa = stringa.Replace("{""result"":true,""token"":""", String.Empty)
                stringa = stringa.Replace(""",""message"":""""}", String.Empty)
                MessageBox.Show("Token acquisito" & vbCrLf & stringa, "TOKEN")
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            Finally
                TOKEN = stringa
                TokenPB.Visible = False
            End Try
            TokenPB.Visible = False
    
    il codice chiama un captcha, ne recupera i cookie e tramite una inputbox invia il testo scritto dall'utente, in risposta il sito rilascia il TOKEN

    questo TOKEN una semplice stringa che metto in una variabile.

    in seguito eseguo un'altra operazione sul sito e precisamente invio alcuni parametri (+ il TOKEN) per avere in risposta altri dati, questo il codice in una funzione:
    Public Function Ricercamappale(PROV As String, COD_COM As String, FOGLIO As String, PART As String)
            Dim urlAddress As String = String.Format("https://wms.cartografia.agenziaentrate.gov.it/inspire/ajax/ajax.php?op=getGeomPart&prov={0}&cod_com={1}&foglio={2}&num_part={3}/&tkn={4}", PROV, COD_COM, FOGLIO, PART, TOKEN)
            Dim stringa As String = ""
            Try
                Dim myWebClient As New WebClient()
                myWebClient.Headers.Add("user-agent", "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Mobile Safari/537.36")
                myWebClient.Headers.Set("Content-Type", "text/plain")
                stringa = myWebClient.DownloadString(urlAddress)
                myWebClient.Dispose()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
            If stringa.Contains("ERRX") Then
                Return 0
            End If
            Dim elementistringa() As String = stringa.Split("[")
            If elementistringa.Length < 3 Then
                MessageBox.Show("il mappale non esiste")
                Return 0
            End If
            Dim primacoppia As String = elementistringa(4).ToString.Replace("], ", "")
            Dim secondacoppia As String = elementistringa(6).ToString.Replace("],", "")
            Dim ESTNORDprimacoppia() As String = primacoppia.Split(",")
            Dim ESTNORDsecondacoppia() As String = secondacoppia.Split(",")
            Dim EST1 As Double = Double.Parse(ESTNORDprimacoppia(0), New System.Globalization.CultureInfo("en-US"))
            Dim EST2 As Double = Double.Parse(ESTNORDsecondacoppia(0), New System.Globalization.CultureInfo("en-US"))
            Dim NORD1 As Double = Double.Parse(ESTNORDprimacoppia(1), New System.Globalization.CultureInfo("en-US"))
            Dim NORD2 As Double = Double.Parse(ESTNORDsecondacoppia(1), New System.Globalization.CultureInfo("en-US"))
            EST1 = (EST1 + EST2) / 2
            NORD1 = (NORD1 + NORD2) / 2
            EST = EST1.ToString.Replace(",", ".")
            NORD = NORD1.ToString.Replace(",", ".")
            Return NORD
            Return EST
        End Function
    
    il problema che se eseguo questa funzione subito dopo aver recuperato il token mi risponde ERRORE 500
    SE copio il TOKEN a parte (es. blocco note) chiudo il debug, poi assegno il TOKEN recuperato alla mia variabile... IL CODICE FUNZIONA!!!!!

    potreste spiegarmi come possibile?
    grazie

+ Rispondi al messaggio
Pagina 3 di 4 primaprima 1234 ultimoultimo

Potrebbero interessarti anche ...

  1. Impedire accesso ad internet
    Da sistemista nel forum Microsoft Windows
    Risposte: 14
    Ultimo Post: 10-05-2018, 12:20
  2. [Freenas] accesso da internet
    Da dragone bianco nel forum Networking e sicurezza
    Risposte: 10
    Ultimo Post: 02-12-2011, 22:08
  3. Accesso tramite ssh ad un sito web
    Da artemis79 nel forum Networking e sicurezza
    Risposte: 3
    Ultimo Post: 19-01-2011, 10:20
  4. Accesso internet
    Da richmond89 nel forum Networking e sicurezza
    Risposte: 27
    Ultimo Post: 17-12-2009, 13:03
  5. Accesso ad Internet
    Da The Revolution nel forum Microsoft Windows
    Risposte: 5
    Ultimo Post: 17-09-2006, 21:26