Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Извлечь информацию из ответа сервера C#

29K
07 августа 2009 года
Quiet as ice
52 / / 14.10.2008
Доброе время суток, вот такой вопросик:

Я посылаю запрос на сервер средствами C#, получаю ответ:

HTTP/1.1 200 OK
Server: nginx/0.5.30
Date: Fri, 07 Aug 2009 14:45:04 GMT
Content-Type: text/html; charset=windows-1251
Transfer-Encoding: chunked
Connection: close
Set-Cookie: бла-бла-бла
Set-Cookie: бла-бла-бла
Set-Cookie: бла-бла-бла
Content-Encoding: gzip

<html><head><meta http-equiv="REFRESH" content="0; url=какой-нить"></head></html>

Вот как мне извлечь из ответа url?

Заранее спасибо (:
29K
08 августа 2009 года
Quiet as ice
52 / / 14.10.2008
у меня win forms на C#, в ней WebBrowser, прохожу в нем авторизацию на сайте с помощью POST-запроса, сервер присылает ответ 200 и в тексте "<html><head><meta http-equiv="REFRESH" content="0; url=url.php?0.5345235"></head></html> "

Вот мне из ответа и нужно выцепить url.php?0.5345235, просто авторизация у меня идет при событии кнопки и в конце события:

webBrowser1.Navigate("http://site.com/url.php?" + rnd.NextDouble());

rnd формируется:

Random rnd = new Random();

но так не идет, то что я свои случайные числа приписываю к url.php? не подходит, надо именно те, какие присылает сервер
297
08 августа 2009 года
koodeer
1.2K / / 02.05.2009
На C# извлечь url можно так:
 
Код:
string s = "<html><head><meta http-equiv=\"REFRESH\" content=\"0; url=url.php?0.5345235\"></head></html>";

int index = s.IndexOf("url=") + 4;
string beginUrl = s.Substring(index);

int index2 = beginUrl.IndexOf("\"");
string url = beginUrl.Substring(0, index2);
29K
08 августа 2009 года
Quiet as ice
52 / / 14.10.2008
Цитата:
string s = "<html><head><meta http-equiv=\"REFRESH\" content=\"0; url=url.php?0.5345235\"></head></html>";



ну эту то строку я смогу присвоить, но после url.php? цифры после каждого запроса разные и мне их после каждой авторизации надо получать(или получать все что после url=), чтоб дальше на этом сайте работать.


url=url.php? - Это фиксировано, а вот цифры после "?" каждый раз разные :(

297
08 августа 2009 года
koodeer
1.2K / / 02.05.2009
В приведённом выше примере кода в переменной url оказывалось значение url.php?0.5345235. Если нужны только цифры (без url.php?) достаточно заменить строку:
 
Код:
int index = s.IndexOf("url=") + 4;

на строку:
 
Код:
int index = s.IndexOf("php?") + 4;

В итоге в переменной url будут только цифры.
29K
08 августа 2009 года
Quiet as ice
52 / / 14.10.2008
Видимо я плохо излагаю свою мысль. Мой пример, это один из ответов сервера.

Мне не понятна эта строка:

Цитата:
string s = "<html><head><meta http-equiv=\"REFRESH\" content=\"0; url=url.php?0.5345235\"></head></html>";



при извлечении:

Цитата:
int index = s.IndexOf("php?") + 4;
string beginUrl = s.Substring(index);

int index2 = beginUrl.IndexOf("\"");
string url = beginUrl.Substring(0, index2)

;

будут же постоянно одни и те же цифры, какие в строке, присвоенные переменной "s". А при каждой моей авторизации, эти цифры после .php? будут меняться и заранее я не знаю какие они будут.

29K
08 августа 2009 года
Quiet as ice
52 / / 14.10.2008
Отправил новый запрос на авторизацию и вот новые цифры

<html><head><meta http-equiv="REFRESH" content="0; url=url.php?0.256620440646"></head></html>

Мне надо как-то либо только цифры получать из каждого запроса или все, что после url=
297
08 августа 2009 года
koodeer
1.2K / / 02.05.2009
Дык переменной s нужно присваивать тот текст, который возвращает сервер. Просто я в качестве примера привёл строгое задание строки.
29K
08 августа 2009 года
Quiet as ice
52 / / 14.10.2008
Цитата: koodeer
Дык переменной s нужно присваивать тот текст, который возвращает сервер. Просто я в качестве примера привёл строгое задание строки.



то есть так?

HttpWebResponse my1HttpWebResponse = (HttpWebResponse)my1HttpWebRequest.GetResponse();


и потом извлекать цифры из объекта my1HttpWebResponse?

29K
08 августа 2009 года
Quiet as ice
52 / / 14.10.2008
Вот код:

Цитата:
HttpWebResponse my1HttpWebResponse = (HttpWebResponse)my1HttpWebRequest.GetResponse();
rnd = my1HttpWebResponse.ToString();
int index = rnd.IndexOf("php?") + 4;
string beginUrl = rnd.Substring(index);

int index2 = beginUrl.IndexOf("\"");
string url = beginUrl.Substring(0, index2);



В последней строчке выбило ошибку:

Цитата:
Длина не может быть меньше нуля.
Имя параметра: length

297
08 августа 2009 года
koodeer
1.2K / / 02.05.2009
Это естественно, т. к. в результате выполнения строки
Цитата:
rnd = my1HttpWebResponse.ToString();


в переменной rnd будет текст System.Net.HttpWebResponse.

В rnd нужно занести именно ответ сервера, т. е. вот это:

Цитата:
HTTP/1.1 200 OK
Server: nginx/0.5.30
Date: Fri, 07 Aug 2009 14:45:04 GMT
Content-Type: text/html; charset=windows-1251
Transfer-Encoding: chunked
Connection: close
Set-Cookie: бла-бла-бла
Set-Cookie: бла-бла-бла
Set-Cookie: бла-бла-бла
Content-Encoding: gzip

<html><head><meta http-equiv="REFRESH" content="0; url=какой-нить"></head></html>

;)

29K
08 августа 2009 года
Quiet as ice
52 / / 14.10.2008
:confused:

А как это сделать, не подскажешь? (:
29K
09 августа 2009 года
Quiet as ice
52 / / 14.10.2008
Ну дык как занести, никто не подскажет? :(((
1.9K
10 августа 2009 года
GreenRiver
451 / / 20.07.2008
 
Код:
webBrowser1.DocumentText
29K
10 августа 2009 года
Quiet as ice
52 / / 14.10.2008
Мне не надо текст отображаемой страницы в webBrowser, мне надо текст в ответе сервера
297
10 августа 2009 года
koodeer
1.2K / / 02.05.2009
Quiet as ice, приведите кусок кода, который выводит ответ сервера на экран.
29K
10 августа 2009 года
Quiet as ice
52 / / 14.10.2008
его нет, на экран у меня код не выводится, я его смотрю сниффером
29K
10 августа 2009 года
Quiet as ice
52 / / 14.10.2008
Вот сам код отправки запроса на сервер:

Код:
TimeSpan ts = DateTime.Now - new DateTime(1970, 1, 1);

HttpWebRequest my1HttpWebRequest = (HttpWebRequest)HttpWebRequest.Create("http://some-url.ru/login.php");
            my1HttpWebRequest.Method = "POST";
            my1HttpWebRequest.Accept = "image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*";
            my1HttpWebRequest.Referer = "http://some-url.ru/";
            my1HttpWebRequest.Headers.Add("Accept-Language", "ru");
            my1HttpWebRequest.ContentType = "application/x-www-form-urlencoded";
            my1HttpWebRequest.Headers.Add("Accept-Encoding", "gzip, deflate");
            my1HttpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; AutoCombats; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MAXTHON 2.0";
            my1HttpWebRequest.Headers.Add("Cookie", "nf=" + sLogin + ";" + "nfid=" + Math.Floor(ts.TotalSeconds).ToString());
            // передаем параметры
            string sQueryString = "7cda50893a8ed5c0cfbbf722d72b89b2=1&login=" + sLogin + "&pwd=" + sPassword;
            byte[] ByteArr = System.Text.Encoding.GetEncoding(1251).GetBytes(sQueryString);
            my1HttpWebRequest.ContentLength = ByteArr.Length;
            my1HttpWebRequest.GetRequestStream().Write(ByteArr, 0, ByteArr.Length);
            // делаем запрос
            HttpWebResponse my1HttpWebResponse = (HttpWebResponse)my1HttpWebRequest.GetResponse();
297
10 августа 2009 года
koodeer
1.2K / / 02.05.2009
А, вот в чём дело. Самого кода вывода нет. Тогда понятно, в чём загвоздка.
Очевидно, нужный текст содержится в одном из свойств класса HttpWebResponse.
Т. е. my1HttpWebResponse.Method, my1HttpWebResponse.ProtocolVersion и пр. Нужно лишь перебрать их все. :)
29K
10 августа 2009 года
Quiet as ice
52 / / 14.10.2008
Вроде что-то выходит, но блин ответ сервера в текстовом виде такой

"‹\b\0\0\0\0\0\0;ыфХ»ћѕъфцќВы§ћ>yрцнп§\nJOбАЈOп>јxюаЫ‹я\nПјярфзУ·фОї{ябЭГП/?=U°ITИ(JMіUКМKI*Р+И(°742±ґ40445PІ{\01аЭЈ\aџю|ьoЈџh§рс-ђ§\a\0RЇcy\0\0\0"


не могу понять почему, с кодировкой вроде все нормально :(
1.9K
10 августа 2009 года
GreenRiver
451 / / 20.07.2008
Цитата: koodeer
А, вот в чём дело. Самого кода вывода нет. Тогда понятно, в чём загвоздка.
Очевидно, нужный текст содержится в одном из свойств класса HttpWebResponse.
Т. е. my1HttpWebResponse.Method, my1HttpWebResponse.ProtocolVersion и пр. Нужно лишь перебрать их все. :)



Вроде как вот это :)

 
Код:
Encoding enc = System.Text.Encoding.GetEncoding(1252);
StreamReader loResponseStream = new StreamReader(webresponse.GetResponseStream(),enc);
string Response = loResponseStream.ReadToEnd();
29K
11 августа 2009 года
Quiet as ice
52 / / 14.10.2008
у меня как бы тоже самое:

 
Код:
string my1StreamReader = new StreamReader(my1HttpWebResponse.GetResponseStream(), Encoding.GetEncoding(1252)).ReadToEnd();



но результат сами видите :(

"‹\b\0\0\0\0\0\0;ыфХ»ћѕъфцќВы§ћ>yрцнп§\nJOбА ЈOп>јxюаЫ‹я\nПјярфзУ·фОї{ябЭГП/?=U°ITИ(JMіUКМKI*Р+И(°742±ґ40445PІ{\01аЭЈ\aџю|ьoЈџ h§рс-ђ§\a\0RЇcy\0\0\0"
14
11 августа 2009 года
Phodopus
3.3K / / 19.06.2008
Это
Цитата:

Content-Encoding: gzip


здесь не при чем?

29K
11 августа 2009 года
Quiet as ice
52 / / 14.10.2008
Спасибо всем, внимание не обратил на сжатие (:
29K
11 августа 2009 года
Quiet as ice
52 / / 14.10.2008
УРЛ вытягивает, все гуд спасибо (:

Возник еще один вопросик, как мне передать куки, вместе с переходом на другую страницу?

"+url" добавляются те самые цифры

webBrowser1.Navigate("http://some-url/url.php?" + url);
29K
11 августа 2009 года
Quiet as ice
52 / / 14.10.2008
То есть, какие-то 2е куки передаются, но не передается сама сессия :(
29K
15 августа 2009 года
Quiet as ice
52 / / 14.10.2008
вопрос все еще актуален :(
1.9K
15 августа 2009 года
GreenRiver
451 / / 20.07.2008
Цитата: Quiet as ice
То есть, какие-то 2е куки передаются, но не передается сама сессия :(


Что вы понимаете под сессией? Идентификатор php-сессии?
Или вопрос в том, как получить или установить cookie в WebBrowser?
Тогда посмотрите в этом направлении:

 
Код:
WebBrowser.Document.Cookie

И вообще наверное стоит почитать msdn.
29K
22 августа 2009 года
Quiet as ice
52 / / 14.10.2008
Куки у меня получает, сохраняет, они у мну есть, как мне передать куки, вместе с переходом на другую страницу? Вот этого найти не могу :( msdn пользуюсь, но не все понятно, что не понятно, вот спрашиваю :(
1.9K
22 августа 2009 года
GreenRiver
451 / / 20.07.2008
Цитата: Quiet as ice
Куки у меня получает, сохраняет, они у мну есть, как мне передать куки, вместе с переходом на другую страницу? Вот этого найти не могу :( msdn пользуюсь, но не все понятно, что не понятно, вот спрашиваю :(



Не очень компетентен в этом вопросе, но мне казалось, что WebBrowser сам должен заботиться об отсылке куков. Попробуйте зайти с помощью него на этот форум и залогиниться, если логин пройдет успешно, значит он сам их отправляет и принимает.

29K
24 августа 2009 года
Quiet as ice
52 / / 14.10.2008
он то прекрасно все это делает, но мне надо использовать куки для дальнейших своих целей :( то есть отправка их вместе с переходом на страницу, самостоятельно :(
1.9K
24 августа 2009 года
GreenRiver
451 / / 20.07.2008
Цитата: Quiet as ice
он то прекрасно все это делает, но мне надо использовать куки для дальнейших своих целей :( то есть отправка их вместе с переходом на страницу, самостоятельно :(



Опишите полностью схему Вашего взаимодействия с сервером, а то мы кажется не понимаем друг друга.

P.S. а не получается добавить свои куки к WebBrowser'у?

29K
25 августа 2009 года
Quiet as ice
52 / / 14.10.2008
Открывается форма с WebBrowser, по нажатию на кнопку происходит следующее:


Код:
TimeSpan ts = DateTime.Now - new DateTime(1970, 1, 1);

            //Прохожу авторизацию
            HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create("http://some-site.ru/login.php");
            myHttpWebRequest.Method = "POST";
            myHttpWebRequest.Accept = "image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*";
            myHttpWebRequest.Referer = "http://some-site.ru/";
            myHttpWebRequest.Headers.Add("Accept-Language", "ru");
            myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
            myHttpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; AutoCombats; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MAXTHON 2.0";
            // передаем параметры
            string sQueryString = "45d5d7c9ef401144c0608d3159fd5ee1=1&login=" + sLogin + "&pwd=" + sPassword;
            byte[] ByteArr = System.Text.Encoding.GetEncoding(1251).GetBytes(sQueryString);
            myHttpWebRequest.ContentLength = ByteArr.Length;
            myHttpWebRequest.GetRequestStream().Write(ByteArr, 0, ByteArr.Length);
            // делаем запрос
            HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();


Далее сохраняю ответ и вытаскиваю нужную инфу из ответа сервера:

 
Код:
string myStreamReader = new StreamReader(myHttpWebResponse.GetResponseStream(), Encoding.GetEncoding(1252)).ReadToEnd();

            int index = myStreamReader.IndexOf("url=") + 4;
            string beginUrl = myStreamReader.Substring(index);

            int index2 = beginUrl.IndexOf("\"");
            url = beginUrl.Substring(0, index2);



Получаю куки:

 
Код:
string sCookies = "";
            if (!String.IsNullOrEmpty(myHttpWebResponse.Headers["Set-Cookie"]))
            {
                sCookies = myHttpWebResponse.Headers["Set-Cookie"];
            }


и далее переход на страницу:

 
Код:
webBrowser1.Navigate("http://some-site.ru/some.php?" + url);


Собственно вот. Как мне отправить куки вместе с переходом на страницу?
1.9K
25 августа 2009 года
GreenRiver
451 / / 20.07.2008
А так не получается (WebBrowser.Document.Cookie)? Что-то уже затягивается наша беседа, а печенюшки стынут... =)
29K
26 августа 2009 года
Quiet as ice
52 / / 14.10.2008
я так не пробовал и честно говоря не могу понять суть
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог