Terve,
Yritän avata sivua HttpWebRequestilla, joka on tupla suojattu asiakas sertifikaatilla ja salasanalla. En kuitenkaan saa kirjautumista toimimaan.
Käytän StreamWriteria lähettääkseni autentikointitiedot sivustolle.
Koodissa on huomioitu __VIEWSTATE ja __EVENTVALIDATION, jotka ovat haettu aiemmalla haulla.
Koodin suorittaminen päättyy 403 Forbidden exceptioniin suorittaessa toista kyselyä. En keksi/näe missä vika piilee.
Try 'Tallentaa keksit Dim cookie As CookieContainer = New CookieContainer 'Post methodilla syötettävän datan muoto postData = String.Format("__VIEWSTATE={0}&__EVENTVALIDATION=_ {1}&TxtUserName={2}&TxtPassword={3}&BtnLogin={4}",_ vs, ev, USERNAME, PASSWORD, BtnLogin) 'WebRequest URL määritelty aiemmin login.aspx httpReq = CType(WebRequest.Create(URL), HttpWebRequest) httpReq.Method = "POST" httpReq.ContentType = "application/x-www-form-urlencoded" httpReq.CookieContainer = cookie 'X509Storesta haettu sertifikaatti httpReq.ClientCertificates.Add(certificate) httpReq.AllowAutoRedirect = True 'StreamWriter kirjottamaan Dim requestWriter As StreamWriter = _ New StreamWriter(httpReq.GetRequestStream()) 'Lähetetäänd data requestWriter.Write(postData) requestWriter.Close() 'Vastauksen voisi lukea tästä httpReq.GetResponse.Close() 'Onko meillä keksejä Console.WriteLine("Cookies: " & cookie.Count.ToString) Dim response As HttpWebResponse 'Uusi haku salasanasuojatulle sivulle httpReq = CType(WebRequest.Create(URL), HttpWebRequest) 'Aiemmin hankittu keksi httpReq.CookieContainer = cookie 'Luetaan sivu response = CType(httpReq.GetResponse(), HttpWebResponse) Dim Str = New StreamReader(response.GetResponseStream()).ReadToEnd() 'Tallennetaan sivu Dim foo = New StreamWriter("spage2.htm", False) foo.WriteLine(Str) foo.Flush() foo.Close() Catch ex As WebException If ex.Status = WebExceptionStatus.ProtocolError Then Console.WriteLine("Status Code : {0}", CType(ex.Response, _ HttpWebResponse).StatusCode) Console.WriteLine("Status Description : {0}", _ CType(ex.Response, HttpWebResponse).StatusDescription) Else Console.WriteLine("Status Code : {0}", ex.Message.ToString) End If End Try
Login sivu riisuttuna
<form name="Form1" method="post" action="Login.aspx?ReturnUrl=sivu.aspx" id="Form1"> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="..." /> <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="..." /> <input name="TxtUserName" type="text" id="TxtUserName" /> <input name="TxtPassword" type="password" id="TxtPassword" /> <input type="image" name="BtnLogin" id="BtnLogin" src="..." border="0" /> </form>
Katsoin muutamaa vastaavaa postausta tällä sivustolla, ja mielestäni niissä koodi on suht samalla tavalla.
Minkä virheilmoituksen se antaa? 403 on siis virhekoodi, mutta yleensä web-palvelimet antavat myöskin hieman tekstiä, josta voisi selvitä tarkemmin mikä mättää.
ex kokonaisuudessaa on
System.Net.WebException: The remote server returned an error: (403) Forbidden.
at System.Net.HttpWebRequest.GetResponse()
at ConsoleApplication1.Module1.Main() in Module1.vb:line 100
Status Code : Forbidden
Status Description : Forbidden
En tuosta ex:n Responsesta saanut parempaa irti
Muokkaus... Ei lol
Ajattelin että onpas tuo samanlainen virhe, kun aiemmin koitin saada sertifikaattia toimimaan. Puuttuhan tuosta jälkimmäisestä kyselystä sertifikaatti.
Muuten menee homma ihan hyvin, mutta Response kirjottaa edelleen login sivun.
Pitänee tutkailla vielä, että missä vika on.
Aihe on jo aika vanha, joten et voi enää vastata siihen.