Försöker fixa ett program som kan logga in på pellesoft o tex chatta, skriva i forumet mm. Du måste skicka requester till de sidorna du vill komma åt och då även bifoga dina cookies. På detta sätt kommer du åt sidorna. Tänk på att Pelle har en timeout på sessionen så väntar du förlänge måste du se till så ditt app loggar in igen. Hmm... nu fattar jag inte riktigt, anropar ju GetHTML direkt efter och där i körs ju: Efter du anropat login, vad händer när du sedan anropar ex chatten genom GetHtml metoden? Får cookien vid login, men när jag kör GetHTML på nån sida returneras bara första sidan (utloggad)... ang å,ä,ö så testa att ändra encoding i din StreamReader från Encoding.Ascii till t.ex. Encoding.Default eller Encoding.UTF7 åäö beror på envodingen du kör. ASp .Net kör UTF8 som default detta kan du änra i web.config eller pilla med encoding klasserna så som Arathorn bla. gav exempel på. Fick lite tips av Onkelborg, bla det att sniffa, ska oxå kolla cookie.asp, sen sa han att man alltid får session.. *tomat* Session får du alltid. <code>Problem med inloggning på pellesoft
Har lyckats med att fånga cookien m. session, men längre kommer jag inte, nån som vet hur jag ska fixa det?
(koden är lite rörig ;) , bara för att testa innan jag skriver programmet)
<code>
CookieCollection cookieCollection=new CookieCollection();
//------------------Här ska memberid fyllas i!!!----------------------
string memberid="xxxxx";
//--------------------------------------------------------------------
private string GetHtml(string strSite)
{
string strText = "";
CookieContainer myCookieContainer = new CookieContainer();
myCookieContainer.Add(cookieCollection);
Debug.WriteLine("cookieCollection[0]: "+cookieCollection[0].Value);
Debug.WriteLine("myCookieContainer ps-cookies: "+myCookieContainer.GetCookies(new System.Uri(strSite)).Count);
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(strSite);
//myRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows XP)";
myRequest.CookieContainer = myCookieContainer;
Debug.WriteLine("myRequest.CookieContainer "+myRequest.CookieContainer.GetCookies(new System.Uri(strSite)).Count);
//myRequest.Referer="http://www.pellesoft.se/login.asp";
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader myStreamReader = new StreamReader(myResponse.GetResponseStream(), Encoding.ASCII); //,Encoding.ASCII
strText = myStreamReader.ReadToEnd();
myStreamReader.Close();
Debug.WriteLine("---Cookies---");
CookieCollection CC = myResponse.Cookies;
for (int i = 0; i < CC.Count; i++)
{
Debug.WriteLine(CC[i]);
}
Debug.WriteLine("---SavedCookies---");
for (int i = 0; i < cookieCollection.Count; i++)
{
Debug.WriteLine(cookieCollection[i]);
}
Debug.WriteLine("---Headers---");
WebHeaderCollection headers=myResponse.Headers;
for (int i = 0; i < headers.Count; i++)
{
Debug.WriteLine(headers[i]);
}
myResponse.Close();
return strText;
}
void CookieTest()
{
string strInfo = "memberid="+memberid;
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] SomeBytes = encoding.GetBytes(strInfo);
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://www.pellesoft.se/login.asp"); //http://www.chedhill.com/testcookie.asp"); //http://thomasa88.digitalrice.com/cookieexempel.cgi");
httpWebRequest.CookieContainer = new CookieContainer();
httpWebRequest.ContentLength = SomeBytes.Length;
httpWebRequest.Method="post";
httpWebRequest.Timeout=10000;
httpWebRequest.AllowWriteStreamBuffering=true;
httpWebRequest.ContentType="application/x-www-form-urlencoded";
httpWebRequest.Referer="http://www.pellesoft.se";
StreamWriter myStream = new StreamWriter(httpWebRequest.GetRequestStream());
myStream.Write(strInfo,0,SomeBytes.Length);
myStream.Close();
HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
Debug.WriteLine("<<Cookies>>");
cookieCollection = httpWebResponse.Cookies;
for (int i = 0; i < cookieCollection.Count; i++)
{
Debug.WriteLine(cookieCollection[i]);
}
Debug.WriteLine("<<Headers>>");
WebHeaderCollection headers=httpWebResponse.Headers;
for (int i = 0; i < headers.Count; i++)
{
Debug.WriteLine(headers[i]);
}
//Debug.WriteLine("Header: Set-Cookie:"+headers["Set-Cookie"]);
//cookieCollection.Add(new Cookie("memberid","xxxxx","","pellesoft.se"));
httpWebResponse.Close();
//----------------------------------------
string strSite="http://www.pellesoft.se";
string strText = "";
CookieContainer myCookieContainer = new CookieContainer();
myCookieContainer.Add(cookieCollection);
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(strSite);
myRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows XP)";
myRequest.CookieContainer = myCookieContainer;
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader myStreamReader = new StreamReader(myResponse.GetResponseStream(), Encoding.ASCII); //,Encoding.ASCII
strText = myStreamReader.ReadToEnd();
myStreamReader.Close();
Debug.WriteLine(">---Cookies---<");
//CookieCollection CC = myResponse.Cookies;
cookieCollection.Add(myResponse.Cookies);
for (int i = 0; i < cookieCollection.Count; i++)
{
Debug.WriteLine(cookieCollection[i]);
}
Debug.WriteLine(">---Headers---<");
headers=myResponse.Headers;
for (int i = 0; i < headers.Count; i++)
{
Debug.WriteLine(headers[i]);
}
myResponse.Close();
//return strText;
Debug.WriteLine(cookieCollection.Count);
Debug.WriteLine(cookieCollection[0].Name);
Debug.WriteLine(cookieCollection[0].Value);
}
private void Form1_Load(object sender, System.EventArgs e)
{
CookieTest();
Debug.WriteLine("");
string ps=GetHtml("http://www.pellesoft.se");
//Debug.WriteLine(ps);
textBox1.Text=ps;
if(ps.IndexOf("Thomas Axelsson")!=-1) //<<<---Namn!
{
MessageBox.Show("inloggad");
}
else
{
MessageBox.Show("utloggad");
}
//textBox2.Text=GetHtml("http://www.pellesoft.se/"); //?lstForums=31
}
</code>
//MrT
<info>
PS. Om du ska testa koden o få utloggad/inloggad rätt måste du byta ut Thomas Axelsson mot ditt eget namn.
</info>Sv: Problem med inloggning på pellesoft
Alltså ta den kod du har, skriv in andra URL:er och förse requesten med de cookies du plockat hem.
//Johan NSv: Problem med inloggning på pellesoft
<code>
CookieContainer myCookieContainer = new CookieContainer();
myCookieContainer.Add(cookieCollection);
/.../
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(strSite);
myRequest.CookieContainer = myCookieContainer;
</code>
//MrTSv: Problem med inloggning på pellesoft
//Johan NSv: Problem med inloggning på pellesoft
(Ett annat mindre problem jag har är att åäö etc blir ?)
Mr T @thomassida.cjb.netSv: Problem med inloggning på pellesoft
Sv: Problem med inloggning på pellesoft
Att du kommer till loginsidan fast du skickar rätt data kan ha med att pelle kanske gjort en rutin i bakgrunden som du inte känner till. Han kanske förnyar en cookie vad som. Detta kan du ju se genom att sniffa trafiken. Starta en sniffer logga in på Pellesoft, gå ex till chatten. Sedan kollar du hur denna trafik ser ut. Headern. Och sedan ser du om den stämmer med din egna.
//Johan NSv: Problem med inloggning på pellesoft
Mr T @thomassida.cjb.netSv: Problem med inloggning på pellesoft
En fördel är att veta hur Pelle gjort för att själv kunna gå mot hans site.
Men när du väl gått mot Login och får ett ok att du är inloggad och får även de cookie ssom är satta skall du typ bara behöva skacka en request mot sida och bifoga de cookies du tog hem (där i ingår bla sessionsID).
Typ om du går mot inlogg: (Sniffade nu med automatisk inloggning påslagen :-( skall sticka nu steax åka så jag orkade inte logga ut.)
Så ser huvudet ut. OBS! Lösen skickas i klartext men detta är endas när automatisk inloggnign är påslagen.
GET /login.asp HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)
Host: www.pellesoft.se
Connection: Keep-Alive
Cookie: memberid=LÖSEN; ASPSESSIONIDSQBBDBDD=ECPKJHPDFDMAMKICCKPMKNIP
Samma data skickas till Summery2.asp Forumet.
GET /development/forum/summary2.asp HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://www.pellesoft.se/
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)
Host: www.pellesoft.se
Connection: Keep-Alive
Cookie: memberid=LÖSEN; ASPSESSIONIDSQBBDBDD=ECPKJHPDFDMAMKICCKPMKNIP
Så om du har dina cookies i din app skall du bara kunna köra GetHtml igen med annan URL. Du tappar inte dina cookies vid försöket efter login?
//Johan NSv: Problem med inloggning på pellesoft
CookieCollection cookieCollection=new CookieCollection();
//------------------Här ska memberid fyllas i!!!----------------------
string memberid="xxxxx";
//--------------------------------------------------------------------
private string GetHtml(string strSite)
{
string strText = "";
CookieContainer myCookieContainer = new CookieContainer();
myCookieContainer.Add(cookieCollection);
</code>
myCookieContainer.Add(cookieCollection); <--- är den tom? efter första varvet när du vill gå mot en annan sida? Nu måste jag dra. Maila gärna ditt projetk om du vill så kan jag ta en närmre titt om du inte löst det, lite svårt att utgå från koden du klistrat in då den inte är fullständig. minstrel@telia.com
Som sagt har du dina cookies vid runda två skall du inte ha några prob.
//Johan N