P P Medlem sedan jan. 2001 2 204 inlägg Frågan 5 jan. 2008 15:23 #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!
P P Medlem sedan jan. 2001 2 204 inlägg 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.
P P Medlem sedan jan. 2001 2 204 inlägg Ä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;
};