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 TryLogin 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.