W jaki sposób można pobrać cookie i wyświetlić je za pomocą String'a?
CookieCollection ciacho = response.Cookies;
W jaki sposób można pobrać cookie i wyświetlić je za pomocą String'a?
CookieCollection ciacho = response.Cookies;
string c = string.Empty;
foreach (HttpCookie itm in Response.Cookies)
c += itm.Name;
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.
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: chunked1000
<!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
<html><head... </blockquote="</blockquote">
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=blocki 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:)
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.
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
Aha. A da się coś takiego zwrócić jako string w c#?
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
Jak przekazać ciasteczka, które wyciągnąłem do następnego żądania, żeby nie tworzyło się nowe. Jak podtrzymać tą sesję?