Uso una connessione Wifi pubblica che, necessita di un login in una pagina, formata da una casella con username, una di password ed un pulsante "connetti".
Purtroppo il login deve essere effettuato ogni ora e quindi: voglio automatizzare il login.
Usando Fiddler (http://www.telerik.com/fiddler) sono riuscito a "intercettare" la richiesta quando premo il pulsante "connetti" che è di tipo POST:
codice HTML:
POST https://blahblahblah.it:12081/cgi-bin/zscp HTTP/1.1
Host: blahblahblah.it:12081
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://blahblahblah.it:12081/cgi-bin/zscp?Section=CPAuth&Action=Show&ZSCPRedirect=google.com:::http://google.com/%3f
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 200
Section=CPAuth&Action=Authenticate&ZSCPRedirect=%3A%3A%3Ahttp%3A%2F%2Fwww-5.abcde.it%%2F&Powered=Powered+by+me&RND=0.xxxx&Popup=yes&U=username&P=password&Realm=a
Mettendo insieme l'URL e la "Section" mi ritrovo il link: https://blahblahblah.it:12081/cgi-bi...ssword&Realm=a che, se aperto su un normale browser mi connette alla rete.
Ora stavo pensando di usare il componente WebBrowser e fare in modo che mi apra tale link, il problema è che la pagina ha un certificato non valido. Quindi in ogni caso mi apre un pop-up chiedendomi di accettare il certificato etc etc...
Prima di cercare un modo che mi permetta di bypassare il problema del certificato con il WebBrowser stavo cercando di un metodo alternativo. Ho pensato di usare le informazioni della richiesta POST per crearmela da codice.
Seguendo la procedura indicata su https://msdn.microsoft.com/it-it/lib...v=vs.110).aspx :
codice:
Public Function Main()
Dim request As WebRequest = WebRequest.Create("https://blahblahblah.it:12081/cgi-bin/zscp")
request.Method = "POST"
CType(request, HttpWebRequest).Host = "blahblahblah.it:12081"
CType(request, HttpWebRequest).UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0"
CType(request, HttpWebRequest).Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
CType(request, HttpWebRequest).Referer = "https://blahblahblah.it:12081/cgi-bin/zscp?"
'CType(request, HttpWebRequest).Connection = "Keep-Alive"
CType(request, HttpWebRequest).ContentType = "application/x-www-form-urlencoded"
'CType(request, HttpWebRequest).ContentLength = 200
Dim postData As String = "CPAuth&Action=Authenticate&ZSCPRedirect=%3A%3A%3Ahttp%3A%2F%2Fwww-5.abcde.it%%2F&Powered=Powered+by+me&RND=0.xxxx&Popup=yes&U=username&P=password&Realm=a"
Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
Dim dataStream As Stream = request.GetRequestStream()
dataStream.Write(byteArray, 0, byteArray.Length)
dataStream.Close()
Dim response As WebResponse = request.GetResponse()
MsgBox(CType(response, HttpWebResponse).StatusDescription)
dataStream = response.GetResponseStream()
Dim reader As New StreamReader(dataStream)
Dim responseFromServer As String = reader.ReadToEnd()
Console.WriteLine(responseFromServer)
reader.Close()
dataStream.Close()
response.Close()
End Function
Ora se richiamo la funzione ovviemente mi butta fuori Exception thrown: 'System.Net.WebException' in System.dll (per via del certificato) quindi ho risolto mettendo nel Load della form:
codice:
ServicePointManager.ServerCertificateValidationCallback = AddressOf AcceptAllCertifications
Non mi da Exception thrown e il MsgBox da fuori "OK" però comunque non mi trovo loggato...
Mi chiedo come quale possa essere il problema e se fosse possibile risolverlo prima di passare ad usare il componente WebBrowser