[C#] HttpWebRequest a problém s cookies – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

[C#] HttpWebRequest a problém s cookies – .NET – Fórum – Programujte.com[C#] HttpWebRequest a problém s cookies – .NET – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
DragonBehemont0
Super člen
20. 6. 2012   #1
-
0
-

Zdravím,

mám problém s HttpWebRequstem a cookies. Jedná se o prográmek, který by se měl přihlásit na určetou stránku, aby následně mohl dále pracovat na serveru. Pro tyto účely se používají cookies, které je potřeba vygenerovat, což samo o sboě není problém.

Problém spočívá v tom, že na samotné stránce je skript v JS, který generuje cookies pomocí poněkud zajímavá funkce.

function randomCookie() {
var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split('');
var str = '';
var date = new Date(); date.setTime(date.getTime()+(28*24*60*60*1000)); var expires = "; expires="+date.toGMTString();
for (var i = 0; i<45; i++) {
  str += chars[Math.floor(Math.random() * chars.length)]; str+=expires; str += "path=/"
} return str; }
if (document.cookie) {} else {document.cookie=randomCookie(); }

Když jsem tuto funkci vyvolal, tak mi vrátila následující hodnotu

k; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/m; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/W; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/H; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/M; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/a; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/m; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/3; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/s; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/4; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/z; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/V; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/R; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/d; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/A; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/i; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/r; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/9; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/D; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/q; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/J; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/c; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/6; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/T; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/d; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/9; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/M; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/X; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/b; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/h; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/0; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/X; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/8; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/8; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/K; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/v; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/B; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/2; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/B; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/g; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/f; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/y; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/I; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/c; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/J; expires=Wed, 18 Jul 2012 14:30:56 UTCpath=/

Když jsem se podíval v prohlížeči na obsah cookies pro danou stránku, tak mi to napsalo, že existuje pouze jedna cookies a ta má název o délce jednoho písmena.

Zkoušel jsem už snad všechno, ale nepodařilo se mi to rozchodit, momentálně program vypadá takto ...

 Proměnné v dané funkci.

            ErrorResult vracime = null;
            HttpWebRequest request = null;
            System.IO.Stream reqStream = null;
            HttpWebResponse response = null;
            System.IO.StreamReader sr = null;
            string[] generatorChars = new string[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "T", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };
            Random gener = new Random();
            Cookie SusenkaProFormular = null;

 Proměnná pro celou třídu 

CookieCollection DozaSeSusenkama = null;

Zdrojový kód funkce, který by měl vygenerovat cookies a odeslat data na server. Kontroloval jsem to i přes wireshark a všechno odesílá v pořádku. 

                DozaSeSusenkama = new CookieCollection();

                for (int i = 0; i < 45; i++)
                {
                    SusenkaProFormular = new Cookie();
                    SusenkaProFormular.Name = generatorChars[gener.Next(0, generatorChars.Length - 1)];
                    SusenkaProFormular.Value = SusenkaProFormular.Name;
                    SusenkaProFormular.Path = login_user;
                    SusenkaProFormular.Domain = address_ip;
                    SusenkaProFormular.Expires = DateTime.Now.AddDays(28);
                    SusenkaProFormular.HttpOnly = false;
                    DozaSeSusenkama.Add(SusenkaProFormular);
                    SusenkaProFormular = null;
                }

                // Deklarace telegramu
                // sopas_username=Maintenance&sopas_password=Inspector
                string data = "sopas_username=" + Name + "&sopas_password=" + Password;
                byte[] data_bytes = System.Text.Encoding.ASCII.GetBytes(data);

                // Nastavení requestu
                request = (HttpWebRequest)HttpWebRequest.Create("http://" + address_ip + ":" + port.ToString() + login_user);
                request.AllowWriteStreamBuffering = false;
                request.Method = "POST";
                request.KeepAlive = true;
                request.Timeout = 3000;
                request.CookieContainer = new CookieContainer();
                request.CookieContainer.Add(DozaSeSusenkama);
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = data_bytes.Length;
                request.ServicePoint.Expect100Continue = false;

                reqStream = request.GetRequestStream();
                reqStream.Write(data_bytes, 0, data_bytes.Length);
                reqStream.Flush();
                reqStream.Close();
                reqStream.Dispose();

                // Příjem odpovědi
                response = (HttpWebResponse)request.GetResponse();
                Trace.WriteLine("Cookies count = " + response.Cookies.Count);

Když se tam pokusím přihlásit přes IE, tak to jde ... ;-) 

Nahlásit jako SPAM
IP: 80.254.147.–
Nemusíte vědět vše, stačí jen, když víte, kde to najít, a jak to použít. Naučíte se to právě tím používáním ;-)
Reklama
Reklama
DragonBehemont0
Super člen
22. 6. 2012   #2
-
0
-

Jen doplnění, co jsem všechno zkoušel:

- Odeslat jen jedno cookies
- Odeslat 45 cookies
- Odeslat cookies, kde jsou jen vyplnene nazev a doména
- Odeslat jedno cookies, kde název obsahoval 1 písmeno, obsahoval 45 písmen
- Nechat cookies vygenerovat server na základě vlastnosti HttpWebResponse.Cookies
- Oteřít si stránku jednou před přihlášením a tehdy vygenerovat cookies a přihlásit se s tím samým cookies
... ale nic nezabralo.

Nahlásit jako SPAM
IP: 95.82.185.–
Nemusíte vědět vše, stačí jen, když víte, kde to najít, a jak to použít. Naučíte se to právě tím používáním ;-)
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 86 hostů

Podobná vlákna

Problém s cookies — založil pecan987

Problem s cookies — založil 7raul

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý