Hej! Förslag på lösning: Rätta felet :) Som man frågar får man svar ;) Kan du visa lite exempelkod (med inloggningsuppgifterna borttagna, såklart)? Nedan ser du rutinen som kör frågan. Innan dess har jag slagit ihop parametrarna i postdata, typ username=XX&password=YY. Har även provat att lägga med de dolda parametrarna (och knappen), service=M&msgId=-1 Funderar också på om det kan vara något problem med cookies? Tack för tipsen!! Postar du till https vid inloggningen också? (Skriver från mobil :) ) Alltid på alerten ser jag!!! :) Testa att installera fiddler, är en liten debugger för http i form at en proxy. Installera den, och ställ in så den även kör proxy på https med self-signed certifikat. Gå in på avanza, du får då en varning om osäkert certifikat, installera då det. Starta sedan om webbläsaren, och gör en komplett inloggning på avanza. Kör sedan programmet en gång. I fiddler kan du sedan kolla exakt vad som skiljer mellan webbläsaren och ditt program. Jag tror att du saknar en "NewLine" i din post data. Har testat lite med fiddler och såg då att "Submit=Logga+in"skall skickas med. Har testat det men det hjälpte - naturligtvis inte ;( Kan du utveckla det där med cookies, hängde inte riktigt med där? Angående att lägga till saker, om du kör med webrequest som jag har för mig att du gör så finns det antingen egenskaper med samma namn, eller så finns det ett dictionary som heter typ headers eller liknande Angående cooiesarna så var det inte mycket att hänga med på ;) eftersom cookieinfon efter requesten inte är alls samma som i cookiesen som browsern åstadkommer (om man jämför de olika fiddler-värdena). > En annan sak är att min applikation 8kör den fortfarande i debug givetvis) inte klarar av att fixa en säker anslutning om "https dekryptering" är påslagen i Fiddler", så jag måste köra med den avslagen. Vet inte riktigt hur det påverkar än, har inte haft så mycket tid de sista två dagarna. Fick lägga till detta i koden någonstans för att Fiddler skulle köras med HTTPS-dekrypteringen påslagen: Testa att gå till inloggningssidan först, sedan logga in. Tack! Har testat det också, men jag får bara återigen se inloggningssidan.Login till websida via C#-applikation
Jag vill logga in till mitt konto på Avanza via min C#-applikation. Websidan som loginformuläret finns på är en .jsp-sida.
Hittade detta på nätet men får det inte att fungera: http://geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx
Har någon något förslag på hur man skall göra?
PS. Jag tänker INTE ge er inloggingsuppgifterna :D
Mvh
Sv: Login till websida via C#-applikation
(Om du vill ha mer detaljerat förslag så föreslår jag att du lämnar en mer detaljerad felbeskrivning, inkluderande ev. felmeddelanden, kod som strular, vad som händer/inte händer etc :) )Sv:Login till websida via C#-applikation
Nja, koden funkar så till vida att den returnerar en sida, men en sida som säger att jag fortfarande inte är inloggad.
Alltså kommer jag tillbaka till inloggningssidan som säger "för att se denna sidan måste du vara inloggad".
MvhSv: Login till websida via C#-applikation
(I ditt fall misstänker jag att du nog kanske missar att skicka med en del fält till servern? Tittar man i htmlkoden för avanzas inloggningssida så ser man att det t.ex. skickas med lite hidden-fält. Sedan kan det vara så att man t.ex. måste "skicka med" submitknappen.Sv:Login till websida via C#-applikation
Det som är skumt är att sidan som returneras är loginsidan, men den har accepterat användarnamn och lösen verkar det som, för om man i en browser anger fel uppgifter kommer loginsidan upp fast med tillägget om "fel anv.namn eller lösen".
Såg någonstans att det skulle vara ett tillägg i koden om det rörde sig om https (du ser det i mitten av koden), men jag vet inte om det är aktuelt i dagens version av .NET.
Kan det vara något cookieproblem?
private string PostData(string url, string postData)
{
//request.ContentLength = postData.Length;
HttpWebRequest request = null;
Uri uri = new Uri(url);
request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
UTF8Encoding encoding = new UTF8Encoding();
byte[] bytes = encoding.GetBytes(postData);
// Set contentlength to the number of bytes to send.
// NOTE: postData.Length and bytes.Length are not necessarily equal since
// some characters are represented by several bytes in UTF8.
request.ContentLength = bytes.Length;
//Om det är https ???
//System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();
//request.CookieContainer = new CookieContainer();
request.AllowAutoRedirect = true;
using (Stream writeStream = request.GetRequestStream())
{
writeStream.Write(bytes, 0, bytes.Length);
}
string result = string.Empty;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8))
{
result = readStream.ReadToEnd();
}
}
}
return result;
}Sv: Login till websida via C#-applikation
Raden med request.CookieContainer = new CookieContainer(); borde du nog inte kommentera bort. Testa dessutom att sätta request.AllowAutoRedirect = false; så ser du vad som händer. En gissning är att du loggas in, skickas vidare med redirect, cookies blir fel, nästa sidan anser dig utloggad, och du skickas tillbaka till inloggningssidan..?
Det där med certificatepolicy tror jag mest har att göra med om servern har certifikat som inte är "godkända" av någon anledningen, och man "manuellt" måste godkänna dem. Så det kan du nog strunta i.
Skulle vara intressant att se hela harangen du skicka med som post-data inkl. url (men stryk inloggningsuppgifterna i strängen)Sv:Login till websida via C#-applikation
Jag lade in koden med cookies.
Testade med att sätta AllowAutoRedirect till false - och du är på rätt spår - mycket riktigt gav det en annan respons, "The URL has moved here". "Here" är en länk till depåsammanfattningen, och ställer jag en ny fråga med cookiesarna som jag fått i förra frågan och "länken" ("https://www.avanza.se/aza/login/login.jsp?from=535&msgId=16\") , så kommer jag tillbaka till inloggningssidan, där det står att jag måste vara inloggad.
Sparade Avanzas inloggningssida lokalt och ändrade målet till en liten test.asp-sida som jag gjorde för att testa och skriva ut alla Request.Form-variablerna och dess värde, och fick då fram att parametersträngen skulle se ut så här:
"username=XX&password=YY&service=M&msgId=-1&redirect="
Har även lagt till:
request.UserAgent = "Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
i koden, men ingen skillnad.
Kan det vara något med: AuthenticationLevel eller PreAuthenticate?Sv: Login till websida via C#-applikation
Sv:Login till websida via C#-applikation
ja, jag postar till https vid första anropet.
Om jag postar till http så får jag respons att den flyttat till https med samma harang. Jag lade till null på slutet av min harang också, eftersom det stod i slutet på den responsen jag nämnde ovan.Sv: Login till websida via C#-applikation
Sv: Login till websida via C#-applikation
Mvh,
TibiSv:Login till websida via C#-applikation
När jag jämfört min postdata från en normal inloggning från browser och den från mitt program, så blir contentlength samma , så postdatan borde vara OK nu.
Däremot får jag inte någon vettig cookie-info efter requesten.
Funderar även på om jag behöver lägga in data i request.Accept Charset / Encoding osv. Fattar dock inte hur jag skall koda för att lägga in i dem eller när för den delen. Skall man lägga in det i BeginRequest-eventet som jag läste någonstans?
Skall filura en del till ikväll på detta...Sv: Login till websida via C#-applikation
Sv:Login till websida via C#-applikation
En annan sak är att min applikation 8kör den fortfarande i debug givetvis) inte klarar av att fixa en säker anslutning om "https dekryptering" är påslagen i Fiddler", så jag måste köra med den avslagen. Vet inte riktigt hur det påverkar än, har inte haft så mycket tid de sista två dagarna.
Tack, ska kolla dina tips om headers osv.
Återkommer snarast när jag har mer info. Sv: Login till websida via C#-applikation
Viktig detalj ;) Om du kör med internet explorer, och surfar in med aktiverad fiddler med https-proxy, så kommer du i internet explorer bli varnad om osäkert certifikat. Installera då det certifikatet. Sedan kommer det fungera med .net också :)Sv:Login till websida via C#-applikation
System.Net.ServicePointManager.ServerCertificateValidationCallback +=
delegate(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate,
System.Security.Cryptography.X509Certificates.X509Chain chain,
System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
return true;
};
i övrigt har jag inte kommit så mycket längre. Det verkar som om inte cookiesarna sätt ordentligt. Jag får bara en cookie med SESSIONID men det skall sättas fler om man jämför mot browserinloggningen.
AZASession och AZALite skalll sättas också men det gör de inte.
Nu är jag rätt matt på detta!!!!Sv: Login till websida via C#-applikation
Sv:Login till websida via C#-applikation
Lade till denna raden:
ServicePointManager.Expect100Continue = false;
men ingen bättring. Kan tydligen skapa problem ibland.
Det är något med cookiesarna, de sätts inte ordentligt. Har provat med olika inställningar på CachePolicyn och har i nuläget:
request.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.Reload);
Jag gnetar vidare...