Visualizzazione stampabile
-
Sto tentando di far funzionare il tuo programma ma mi dice che alla riga newContainer.Add(CookieList) c'è CookieList che non è definito.
Poi sbirciando un po' ho trovato questo sbagliato:
codice:
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
in pratica esegui due istruzioni Reader.Read uno di seguito all'altra e quindi perdi quello che hai letto
Penso che le prime due righe devi invertirle
e comunque non servono tutte quelle righe di programma, puoi semplicemente scrivere:
codice:
Do
BytesRead = Reader.Read(Buffer, 0, Buffer.Length)
stringa = System.Text.Encoding.Default.GetString(Buffer)
Loop While BytesRead > 0
Puoi darmi un esempio di variabile PROV, COD_COM, FOGLIO e PART così posso provare ??
-
no no, il codice gira giusto!
dichiaro queste, i dati inseriti sono per comodità, così gira (se gira) :D
codice:
Public PROV As String = "AQ"
Public COD_COM As String = "A018"
Public FOGLIO As String = "1"
Public PART As String = "00002"
Public CookieList As New CookieCollection
Public TOKEN As String = ""
il token dura 10 minuti, se richiedi un nuovo captcha e lo sbagli il vecchio token viene annullato
poi richiedere tutti i token che vuoi... funzioneranno tutti purché la function che ho messo (quella in cui passi le variabili) venga avviata da sola, senza passare prima dal captcha (quindi avendo il token inserito a mano)
-
un video vale più di mille parole
https://www.youtube.com/watch?v=kkxPNqId1t4
qui si vede come il token sia correttamente recuperato MA al successivo uso non permetta di recuperare i dati (EST e NORD) ed esce errore 500
poi copio il token e chiudo il debug
al successivo avvio vado subito alla ricerca senza recuperare il token avendolo copiato prima e.... il codice gira correttamente recuperando EST e NORD
-
Quote:
Originariamente inviato da
Sn0rky
un video vale più di mille parole
Ciao Sn0rky,
scusate il mio off-topic, volevo farvi notare che esiste il tag bbcode video che potete usare per far visualizzare il video direttamente nel messaggio, penso possa offrire una migliore leggibilita' della conversazione. Ho modificato il tuo post per farti vedere il tag in azione. Buon proseguo e scusate questo breve off-topic :mdit:
-
Molto molto strano.
Anche da me fà la stessa cosa.
Se calcolo il token e prosegue dà errore 500.
Se blocco il programma e lo faccio ripartire funziona perfettamente.
Cosa fà l'IDE quando si stoppa il programma ??
Ho provato anche ad utilizzare un altro oggetto HttpWebRequest per capire se istanziandone un altro si poteva risolvere il problema ma non è quello
-
Quote:
Originariamente inviato da
Sn0rky
no no, il codice gira giusto!
..... sei sicuro al 100% ??
Sinceramente di errori ne ho trovati un po', per cui ho deciso di buttare via il tuo codice e di riscriverlo, e adesso a me funziona tutto perfettamente.
Ogni tanto bisogna non fossilizzarsi su cose che pensiamo siano giuste.
Ad esempio, con i dati che mi hai comunicato, a me risponde:
{"GEOMETRIA":["{ \"type\": \"Polygon\", \"coordinates\": [ [ [13.6555608, 42.2074159], [13.6558488, 42.2074159], [13.6558488, 42.2078628], [13.6555608, 42.2078628], [13.6555608, 42.2074159] ] ] }"]}
Ho creato un form, ci ho messo una picturebox chiamata TokenPB e una label chiamata Label1 ed eccoti il codice completo, provalo
codice:
Imports System.Net
Imports System.IO
Imports System.Text.RegularExpressions
Public Class Form1
Dim cc As New CookieContainer
Private Function GetTxtFromHttp(ByVal link As String) As String
Dim req = DirectCast(WebRequest.Create(link), HttpWebRequest)
req.CookieContainer = cc
Dim res = req.GetResponse()
Dim ResStream = res.GetResponseStream()
Dim reader = New StreamReader(ResStream)
Dim txt = reader.ReadToEnd()
reader.Close()
ResStream.Close()
res.Close()
req = Nothing
Return txt
End Function
Private Function GetImageFromHttp(ByVal link As String, Optional ByVal referer As String = "") As Image
Dim req = DirectCast(WebRequest.Create(link), HttpWebRequest)
req.CookieContainer = cc
Dim res = req.GetResponse()
Dim ResStream = res.GetResponseStream()
Dim img = System.Drawing.Image.FromStream(ResStream)
ResStream.Close()
res.Close()
req = Nothing
Return img
End Function
Private Sub Form1_Shown(sender As Object, e As System.EventArgs) Handles Me.Shown
Dim PageUrl As String = "https://geoportale.cartografia.agenziaentrate.gov.it/age-inspire/srv/ita/Captcha?type=image&lang=it"
TokenPB.Image = GetImageFromHttp(PageUrl)
TokenPB.Visible = True
Dim stringa = GetTxtFromHttp(String.Format("https://geoportale.cartografia.agenziaentrate.gov.it/age-inspire/srv/ita/Captcha?type=check&captcha={0}", InputBox("Inserisci il CAPTCHA", "Inserisci il CAPTCHA")))
Dim reg = Regex.Match(stringa, """token"":""(.*?)""")
Dim TOKEN = ""
If reg.Success Then
TOKEN = reg.Groups(1).Value
Else
' .... gestione errore
End If
TokenPB.Visible = False
Dim PROV = "AQ"
Dim COD_COM = "A018"
Dim FOGLIO = "1"
Dim PART = "00002"
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 txt = GetTxtFromHttp(urlAddress)
Label1.Text = txt
End Sub
End Class
-
Grazie SirJo, scusa se non ti ho risposto prima
nel pomeriggio mi è capitato di sentire un mio amico che fa il programmatore di mestiere e appena gli ho girato il codice mi ha detto "cos'è quella mer*a di codice" e me l'ha riscritto bello pulito come il tuo (io proprio non riesco a scrivere codice così ordinato, mannaggia) l'unica differenza è che nel suo usa sempre webclient...
hai ragione, in effetti incaponirsi su un codice non è per nulla produttivo
grazie ancora!!!