Dopo una bella dormita.... era quasi tutto giusto! ovviamente quel che sbagliavo era che facevo 2 chiamate distinte al sito e salvavo il primo cookie e lo infilavo nella seconda richiesta che ovviamente generava il token riferito al secondo cookie... ho riscritto l'intera procedura in modo lineare e adesso funziona!
Private Sub Button20_Click(sender As Object, e As EventArgs) Handles Button20.Click
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
Dim PageUrl As String = "https://geoportale.cartografia.agenziaentrate.gov.it/age-inspire/srv/ita/Captcha?type=image&lang=it"
Try
Dim request As HttpWebRequest = WebRequest.Create(PageUrl)
'request.Method = "GET"
Dim newContainer As New Net.CookieContainer
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())
PictureBox1.Image = tmpImage
Dim Request2 As Net.HttpWebRequest = HttpWebRequest.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")))
Dim tempCookies As New CookieContainer
tempCookies.Add(CookieList)
Request2.CookieContainer = tempCookies
Dim Response2 As Net.HttpWebResponse = Request2.GetResponse()
Dim tempCookies2 As New CookieCollection
tempCookies2 = Response2.Cookies
Dim Reader As IO.Stream = Response2.GetResponseStream()
Dim Buffer(8127) As Byte
Dim BytesRead As Int32
Dim stringa As String
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)
Return
End If
stringa = stringa.Replace("{""result"":true,""token"":""", String.Empty)
stringa = stringa.Replace(""",""message"":""""}", String.Empty)
MessageBox.Show(stringa)
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
End Try
End Sub
ciauuuuuuu