Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: HTML, VB.NET: [VB .NET 4.0] HttpWebRequest ja sisäänkirjautuminen

K_L [16.06.2011 12:47:18]

#

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.

Grez [16.06.2011 12:52:45]

#

Minkä virheilmoituksen se antaa? 403 on siis virhekoodi, mutta yleensä web-palvelimet antavat myöskin hieman tekstiä, josta voisi selvitä tarkemmin mikä mättää.

K_L [16.06.2011 12:59:21]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta