webForumDet fria alternativet

HttpWebRequest - logga in på sida

.NET

2 svar · 3 603 visningar · startad av P

Medlem sedan jan. 20012 204 inlägg
Frågan#1

Tja! Jag skulle vilja logga in på en sida (aktiespar.se) via ett program skrivet i C#. Så här långt har jag kommit: Först börjar jag med att hämta sidan och sparar de cookies som man får då. Sen försöker jag posta inloggningsdata.

ServicePointManager.Expect100Continue = false;

// Post data
string strPostData = "username=XXX&password=YYY&submit=";
request = WebRequest.Create("https://www.aktiespar.se/se/hem/hem.jsp") as HttpWebRequest;
request.CookieContainer = new CookieContainer();

Console.WriteLine("Request1 headers: \n{0}", request.Headers);
HttpWebResponse webResp = (HttpWebResponse)request.GetResponse();

Stream datastream = webResp.GetResponseStream();
StreamReader reader = new StreamReader(datastream);
Console.WriteLine("Responnse1 headers: \n{0}", webResp.Headers);

HttpWebRequest request2;
request2 = WebRequest.Create("https://www.aktiespar.se/se/hem/hem.jsp") as HttpWebRequest;
request2.CookieContainer = request.CookieContainer;
request2.Method = "POST";
request2.ContentLength = strPostData.Length;
request2.ContentType = "application/x-www-form-urlencoded";

StreamWriter sw =new StreamWriter(request2.GetRequestStream());
sw.Write(strPostData);
sw.Close();

Console.WriteLine("Request2 headers:\n{0}", request2.Headers);

HttpWebResponse webResp2 = (HttpWebResponse)request2.GetResponse();

datastream = webResp2.GetResponseStream();
reader = new StreamReader(datastream);
Console.WriteLine("Response2 headers:\n{0}", webResp2.Headers);
Console.WriteLine(reader.ReadToEnd());

Mitt problem är att data inte verka postas till servern eller ignoreras av denna. Jag har laddat ner Live HTTP Headers till firefox och kollat på vilka HTTP meddelanden som skickas om man loggar in på sidan med webbläsaren. Data som postas är(verkar vara) samma som jag skickar.
Om jag tittar på svaret i firefox ett så är det ett 302 meddelande(redirect) och en del cookies, det svaret får aldrig jag utan jag får den sidan jag efterfrågar som om den skulle strunta i data som postades.
Alla tips tas gärna emot!

Medlem sedan jan. 20012 204 inlägg
#2

Så här ser HTTP-Headers ut för de olika request/response.

Request-1 headers: 

Response-1 headers: 
Pragma: no-cache
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Cache-Control: no-cache
Content-Type: text/html
Date: Sun, 06 Jan 2008 11:08:14 GMT
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie: JSESSIONID=aaNkRZJyOfpf; path=/
Server: Apache

Request-2 headers:
Content-Type: application/x-www-form-urlencoded
Accept-Language: sv,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Keep-Alive: 300
Host: [url]www.aktiespar.se[/url]
Cookie: JSESSIONID=aaNkRZJyOfpf
Content-Length: 40

Response-2 headers:
Pragma: no-cache
Transfer-Encoding: chunked
Cache-Control: no-cache
Content-Type: text/html
Date: Sun, 06 Jan 2008 11:08:14 GMT
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Server: Apache

Har kopierat en del inställningar från firefox men det hjälpte inget.
Response-2 borde ge en del session-cookies om man loggat in rätt.

Medlem sedan jan. 20012 204 inlägg
#3

Ändrade om en massa och det verkar fungera, var nog något strul med certifikaten. La jag till denna kod verkar det fungera:

            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;
            };
308 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
153 ms — deklarationer (db)
0 ms — hämta statistik (cache)
150 ms — hämta tråd, inlägg och bilagor (db)
156 ms — ändringar (db)