Wyciąganie cookie

0

W jaki sposób można pobrać cookie i wyświetlić je za pomocą String'a?

CookieCollection ciacho = response.Cookies;

0
string c = string.Empty;
foreach (HttpCookie itm in Response.Cookies)
    c += itm.Name;
0

Mam coś takiego:

            string c = string.Empty;
            WebRequest request = WebRequest.Create("http://google.pl/");
            request.Credentials = CredentialCache.DefaultCredentials;
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream dataStream = response.GetResponseStream();
            foreach (HttpCookie itm in response.Cookies)
            {
                c += itm.Name;
            }
            StreamReader reader = new StreamReader(dataStream);
            string responseFromServer = reader.ReadToEnd();
            richTextBox1.Text = responseFromServer+"\n"+c;
            reader.Close();
            dataStream.Close();
            response.Close();

Jak widać zmienną c wyświetlam na końcu pola tekstowego. Niestety wygląda na to, że zmienna jest pusta.

0

gdziesz masz blad.. GET / na www.google.pl zwraca:

HTTP/1.1 200 OK
Date: Tue, 15 Jun 2010 0755 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-2
Set-Cookie: PREF=ID=c784abb5e1c6973f:TM=1276585435:LM=1276585435:S=o5RF6CB0om1OccbN; expires=Thu, 14-Jun-2012 0755 GMT; path=/; domain=.google.pl
Server: gws
X-XSS-Protection: 1; mode=block
Transfer-Encoding: chunked

1000

<!doctype html><html><head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-2"><title>Google</title><script>window.google={kEI:"2yUXTKPz.........

wiec takie cookie powinienes zobaczyc

nawet jesli przez 1.0 bys sie polaczyl z google.pl bez "www." i bez headera host, dostaniesz:

HTTP/1.0 302 Found
Location: http://www.google.pl/
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Set-Cookie: PREF=ID=0f3161a643072f13:TM=1276585638:LM=1276585638:S=LydmviyIwjQwhY6V; expires=Thu, 14-Jun-2012 0718 GMT; path=/; domain=.google.com
Set-Cookie: NID=35=aDkAtg23SjFaMs6wTUsxxgONxw7DNrWFWoBJflZFWdhUsciFR61VC0X8SEWmeZUZ-_WVzsva0yypn5FZQlmv_zASZeTh0qetjrextV_vspIjxSZEsQboQaOn5IT5NfBK; expires=Wed, 15-Dec-2010 0718 GMT; path=/; domain=.google.com; HttpOnly
Date: Tue, 15 Jun 2010 0718 GMT
Server: gws
Content-Length: 218
X-XSS-Protection: 1; mode=block

<html><head... </blockquote="&lt;/blockquote">

i tez jest ciastko

sprawdz jaki dostajesz kod odpowiedzi. troche to dziwne, to Twoj kod na oko wyglada ok.
sprawdz jeszcze response::headers - moze ciastka sa, tylko nieprzetrwiaone z jakiegos powodu:)

0

Trochę pokombinowałem i coś mi wyszło tak jakoś w połowie. Udało mi się wyciągną dwie zmienne z ciasteczek.

           //tworzymy nową isntację klasy kontenera ciasteczek, do ich przechowywania
            CookieContainer kontener = new CookieContainer();

            //GET
            //tworzymy nową istancję klasy HttpWebRequest i przekazujemy jej parametr z adresem strony do pobrania
            HttpWebRequest zapytanie = (HttpWebRequest)WebRequest.Create("http://sms.priv.pl/");
            //definiujemy metodę
            zapytanie.Method = "GET";
            //definiujemy user-agenta "przeglądarki", żeby mechanizmy forum nie nabrały co do naszych niecnych poczynań podejrzeń 
            zapytanie.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3";
            //definiujemy rodzaj treści z którą będziemy pracować - strony www
            zapytanie.ContentType = "application/x-www-form-urlencoded";
            //włączamy możliwość sprawdzania stałości komunikacji ze stroną 
            zapytanie.KeepAlive = true;
            //definiujemy rodzaj treśći, którą możemy i chcemy pozyskać 
            zapytanie.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            //podajemy link z którego trafiliśmy
            zapytanie.Referer = "http://sms.priv.pl/";
            //podłączmy utworzony wcześniej kontener na ciasteczka do naszego zapytania
            zapytanie.CookieContainer = kontener;
            //zezwalamy na przekierowania na nowy adres w czasie wykonywania zapytania
            zapytanie.AllowAutoRedirect = true;
            //tworzymy nową isntacje klasy 
            HttpWebResponse odpowiedz = (HttpWebResponse)zapytanie.GetResponse();
            //zamieniamy odpowiedź z serwera na strumień
            StreamReader odpowiedzSTR = new StreamReader(odpowiedz.GetResponseStream());
            //zamieniamy strumień na string
            String DaneOdebrane = odpowiedzSTR.ReadToEnd();

            string ciasteczka = "";
            foreach (Cookie cook in odpowiedz.Cookies) { ciasteczka += cook.ToString() + "; "; };

            richTextBox1.Text = ciasteczka;

W odpowiedzi dostałem:

PHPSESSID=c236386daef9de71257ecafa15c1ca9c; 
a=6aa8ca30388a942a342ba705d94cbbef; 

Czyli połowę sukcesu. Reszta ciasteczek z tego co widzę to utma, utmb, utmc, utmv, utmz - czyli Google Analysis. Skąd zabrać resztę - chodzi mi dokładnie o tą stronę.

Jak zrobiłeś, że zwróciło Ci nagłówki? Za pomocą c# czy monitorowałeś po prostu zapytania?

Bardzo proszę o pomoc.

0

wlaczylem stare dobre telnet/putty i puscilem adresowi www.google.pl:80 (RAW) httprequesty:

GET / HTTP/1.1
Host: www.google.pl

oraz
GET / HTTP/1.0
i to co wkleilem, to ich dokladny wynik, z przycieta trescia zwroconego html'a

0

Aha. A da się coś takiego zwrócić jako string w c#?

0

tak. szczerze mowiac nie wiem czy przy httpclient rowniez (daje on mozliwosc operowania na responsestream, ale nie pamietam/nie wiem czy zawiera ono tylko 'wlasciwa' tresc odpowiedzi czy calosc), ale na pewno mozesz wziac klase tcpclient i po prostu polaczyc sie z www.google.pl:80 i wyslac tekstem w/w żądanie, tcpclient zwroci Ci 100% nieprzetlumaczona odpowiedz, tak jak ja Ci wkleilem

tylko, czy ma to sens? jesli chcesz tylko podejrzec - to a pewnie, bierz tcpclient, ale jesli chcesz parsowac potem naglowki i korzystac z http - to po co masz pisac jeszce raz samemu kod, ktory juz jest napisany w httpclient i ktory w dodatku obsluguje SSL i inne duperele? HttpClient/HttpRequest/HttpResponse dziala poprawnie, serio, zwraca takze ladnie i poprawnie komplet nalgowkow.. musiales miec jakis banalny blad. Moze one wymagaja abys przed wyslaniem zapytania np. wlaczyl jakas opcje w stylu ParseHeaders etc? poszukaj

0

Jak przekazać ciasteczka, które wyciągnąłem do następnego żądania, żeby nie tworzyło się nowe. Jak podtrzymać tą sesję?

1 użytkowników online, w tym zalogowanych: 0, gości: 1