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

Ваш аккаунт

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

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

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

Как получить куки из Response в новый Request?

31K
19 августа 2012 года
reyn90
38 / / 07.06.2009
Создаю на платформе Visual Basic.NET

1.Итак, я создаю первый запрос HttpWebRequest
 
Код:
Dim req As Net.HttpWebRequest = DirectCast(Net.HttpWebRequest.Create(url_adres), Net.HttpWebRequest)
и создаю контейнер для куков.
 
Код:
Dim tmpOk As New CookieContainer
Потом присваиваю куки запросу
 
Код:
req.CookieContainer = tmpOk
2.После чего получаю ответ от запроса req
 
Код:
Dim res As Net.HttpWebResponse = DirectCast(req.GetResponse, Net.HttpWebResponse)
И сходу присваиваю переменной tmpOk куки от ответа
 
Код:
tmpOk.Add(res.Cookies)
3.Теперь создаю второй запрос:
 
Код:
Dim req2 As Net.HttpWebRequest = DirectCast(Net.HttpWebRequest.Create("url_adres2), Net.HttpWebRequest)
Устанавливаю опять куки
 
Код:
req2.CookieContainer = tmpOk
Вот только во второй ЗАПРОСЕ там где url_adres2 должно быть что то вроде 7titft7nuut3d22mqtdg67f1c4
В перехвате запросов
Cookie PHPSESSID=7titft7nuut3d22mqtdg67f1c4; _ym_visorc=w
ВОПРОС: Как получить программно строку Cookie PHPSESSID=7titft7nuut3d22mqtdg67f1c4; _ym_visorc=w ????
31K
20 августа 2012 года
reyn90
38 / / 07.06.2009
66 просмотров на данный момент и никто не знает ответа!
40K
20 августа 2012 года
D129
228 / / 18.04.2012
Цитата: reyn90
66 просмотров на данный момент и никто не знает ответа!



Не то что бы не знают....
Я делал один раз запросы с редиректом.... бррр , тупее и бесперспективнее работы не было (тупо пришлось все варианты попробовать - делал подобные запросы из обычного браузера, ловил сниффером, и свои подстраивал, чтобы были один в один).
там все очень зависимо от сайта, которому вы шлете запросы. То, что нашел я - не факт что вообще будет правильно у вас.

277
20 августа 2012 года
arrjj
1.7K / / 26.01.2011
Цитата:
Вот только во второй ЗАПРОСЕ там где url_adres2 должно быть что то вроде 7titft7nuut3d22mqtdg67f1c4


Нет, в url PHPSESSID добавляется только если в браузере не разрешены куки, или на сервере принудительно настроено. У тебя явно снифером видно, что сессия передается в куках, так что всё нормально должно быть, с url ты ничего не должен делать.

Цитата: reyn90
66 просмотров на данный момент и никто не знает ответа!


Просто всем, как и тебе неохота писать пример по msdn, а сразу получить готовое. Могу дать ссылок: CookieContainer.GetCookies CookieCollection.Count CookieCollection.Item Cookie.Name Cookie.Value тебе осталось приложить минимум фантазии и логики чтоб решить свою проблему.

31K
21 августа 2012 года
reyn90
38 / / 07.06.2009
Цитата: arrjj

Нет, в url PHPSESSID добавляется только если в браузере не разрешены куки, или на сервере принудительно настроено. У тебя явно снифером видно, что сессия передается в куках, так что всё нормально должно быть, с url ты ничего не должен делать.

URL генерируется по кукам т.е. http://tralya.lya/index.php?сессия из кук

Цитата: arrjj

Просто всем, как и тебе неохота писать пример по msdn, а сразу получить готовое.
... ... ...
тебе осталось приложить минимум фантазии и логики чтоб решить свою проблему.


Ошибочка вышла, у меня есть готовое, просто мне как и всем нужно не пугать людей огромными кодами.
Ваши ссылки не помогли, а вот человек на паралельном форуме помог. Вот смотрите:
TextBox3.Text = res.Headers("Set-Cookie")
TextBox3.Text = TextBox3.Text.Replace("PHPSESSID=", "")
TextBox3.Text = TextBox3.Text.Replace("; path=/", "")

Ещё вопрос: Зачем создан этот форум?

277
21 августа 2012 года
arrjj
1.7K / / 26.01.2011
Цитата: reyn90

Ваши ссылки не помогли, а вот человек на паралельном форуме помог. Вот смотрите:
TextBox3.Text = res.Headers("Set-Cookie")
TextBox3.Text = TextBox3.Text.Replace("PHPSESSID=", "")
TextBox3.Text = TextBox3.Text.Replace("; path=/", "")


Ссылки не помогли по причине, что я описал в прошлом посте, повторюсь - ты хочешь получить готовое и не хочешь чучуть подумать.
Тебе предложили велосипед с квадратными колесами. Добавится новая кука или зайдешь с уже имеющимися и всё ппц.
Правильней сделать как в примере:

 
Код:
Dim url as string = "твой_урл?"+res.Cookies("PHPSESSID").Value 'хз как там правильно по синтаксису в VB
Или даже
 
Код:
Dim url as string = "твой_урл?"+tmpOK.GetCookies("сайткук")("PHPSESSID").Value
Цитата: reyn90

Ещё вопрос: Зачем создан этот форум?



Тут заставляют людей думать, а не советуют всякую ересь. Будь готов к тому что тебя тут могут оскорбить, унизить и высмеять, но тебя направят на путь истинный :D

31K
21 августа 2012 года
reyn90
38 / / 07.06.2009
Цитата: arrjj

Тут заставляют людей думать, а не советуют всякую ересь. Будь готов к тому что тебя тут могут оскорбить, унизить и высмеять, но тебя направят на путь истинный :D


Тогда вопрос не по VB.NET а по PHP: Почему в методе ПОСТ снифер не перехватил строку с данными, но Length установил? Я по этому Length с горем пополам собрал запрос, и количество символов совпало. Завтра буду проверять код.
На этот вопрос вы меня тоже думать заставите? Я даже ответа не знаю, раньше показывал, а ща нет. Мне кажется из-за винды. Я чёрную копию использую по этому.

277
21 августа 2012 года
arrjj
1.7K / / 26.01.2011
Цитата: reyn90

Тогда вопрос не по VB.NET а по PHP: Почему в методе ПОСТ снифер не перехватил строку с данными, но Length установил? Я по этому Length с горем пополам собрал запрос, и количество символов совпало. Завтра буду проверять код.
На этот вопрос вы меня тоже думать заставите? Я даже ответа не знаю, раньше показывал, а ща нет. Мне кажется из-за винды. Я чёрную копию использую по этому.


Запрос может быть из нескольких пакетов, вероятно сниффер просто их не объеденил. Дело в том что на пакеты режет уже сетевой протокол. Ну и может снифер такой? Может плагином каким нибудь к браузеру посмотришь запросы?

31K
21 августа 2012 года
reyn90
38 / / 07.06.2009
Цитата: arrjj

Запрос может быть из нескольких пакетов, вероятно сниффер просто их не объеденил. Дело в том что на пакеты режет уже сетевой протокол. Ну и может снифер такой? Может плагином каким нибудь к браузеру посмотришь запросы?


У меня опера, на неё сниферов не видел.

277
21 августа 2012 года
arrjj
1.7K / / 26.01.2011
Цитата: reyn90
У меня опера, на неё сниферов не видел.


Пздц ...:D я конечн понимаю там у вас "Клуб фанатов оперы" и всё такое...гг :) но кто тебе мешает поставить тотже например ...файрфокс? к лисе есть такой плагин

31K
22 августа 2012 года
reyn90
38 / / 07.06.2009
Сделал как вы посоветовали! Я сделал правильный запрос. Спасибо за сниф.
Объясните следующее:

Код:
Dim tmpOk As New Net.CookieContainer
        Dim req As Net.HttpWebRequest = DirectCast(Net.HttpWebRequest.Create("http://syte.net"), Net.HttpWebRequest)
        req.CookieContainer = tmpOk
        req.Method = "GET"
        req.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; MRSPUTNIK 2, 4, 0, 508; MRA 6.0 (build 5680); Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; AskTbPTV/5.14.1.20007; InfoPath.1; .NET4.0C; WebMoney Advisor; .NET4.0E)"
        req.Accept = "*/*"
        req.Headers.Add(HttpRequestHeader.AcceptLanguage, "ru")
        req.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate")
        req.KeepAlive = True
        req.Host = "syte.net"
        'req.AutomaticDecompression = DecompressionMethods.GZip

        Dim res As Net.HttpWebResponse = DirectCast(req.GetResponse, Net.HttpWebResponse)
        tmpOk.Add(res.Cookies)

        TextBox3.Text = res.Headers("Set-Cookie")
        res.Close()

        '------------Здесь есть ошика, кажись в кодировании переменной zap--------------------
        Dim tmpOk2 As New Net.CookieContainer
        tmpOk2 = tmpOk

        Dim zap As String = zapros_post // здесь данные котроные надо передать пост запросом
        Dim encodin As New UTF8Encoding
        Dim bytea As Byte() = encodin.GetBytes(zap)

        Dim req2 As Net.HttpWebRequest = DirectCast(Net.HttpWebRequest.Create("http://syte.net"), Net.HttpWebRequest)
        req2.Method = "POST"
        req2.Headers.Add(HttpRequestHeader.AcceptLanguage, "ru")
        req2.Referer = "http://syte.net"
        req2.Accept = "text/javascript, text/html, application/xml, text/xml, */*"
        req2.ContentType = "application/x-www-form-urlencoded; charset=utf-8"
        req2.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate")
        req2.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; MRSPUTNIK 2, 4, 0, 508; MRA 6.0 (build 5680); Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; AskTbPTV/5.14.1.20007; InfoPath.1; .NET4.0C; .NET4.0E)"
        req2.Host = "syte.net"
        req2.ContentLength = bytea.Length
        req2.KeepAlive = True
        req2.Headers.Add(HttpRequestHeader.CacheControl, "no-cache")
        req2.CookieContainer = tmpOk2
        Dim req2str As Stream = req2.GetRequestStream
        req2str.Write(bytea, 0, bytea.Length)
        req2str.Close()

        Dim res2 As Net.HttpWebResponse = DirectCast(req2.GetResponse, Net.HttpWebResponse)
        tmpOk2.Add(res2.Cookies)
        TextBox4.Text = res2.Headers("Set-Cookie")
        res2.Close()
Правильно ли я передаю куки? У меня от снифера приходят
X-Requested-With XMLHttpRequest // как его создать в программе?

Cookie PHPSESSID=3e39990ebfcdd2a148abed6ec068b470; _ym_visorc=w; __utma=36956070.792894578.1345619964.1345619964.1345619964.1; __utmb=36956070.1.10.1345619964; __utmc=36956070; __utmz=36956070.1345619964.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
Pragma no-cache // А как его?
Моя прога показывает PHPSESSID=3e39990ebfcdd2a148abed6ec068b470 и только. Может быть это из-за неправильного кодирования POST данных?
277
22 августа 2012 года
arrjj
1.7K / / 26.01.2011
1) req2.Headers.Add("X-Requested-With","XMLHttpRequest");
2) Pragma no-cache вроде тебе не нужен - это обычно серверный заголовок, чтоб пользователь не кешировал страницу, а каждый раз заново запрашивал
3) все куки кроме PHPSESSID устанавливаются другими сайтами (конкретно тут yandex (вебвизор) и google (google analytics) т.к. в проге ты их скрипты со странички не обрабатываешь то и нет ихних кук. можешь смело игнорировать - они не нужны.
4) пост данные должны быть в формате name=value&name2=value2&...&nameN=valueN если так и есть, то у тебя всё правильно.
5) чтоб передвать куки между разными запросами просто используй для них один контейнер
31K
22 августа 2012 года
reyn90
38 / / 07.06.2009
Я тут параллельно создаю другую прогу, так вот её код
Код:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim req0 As HttpWebRequest = DirectCast(HttpWebRequest.Create("http://football.kulichki.net/wdata/russia_flash/russia_results.php"), Net.HttpWebRequest)
        'req0.CookieContainer = tmpOk0
        req0.Method = "GET"
        req0.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; MRSPUTNIK 2, 4, 0, 508; MRA 6.0 (build 5680); Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14,52; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; AskTbPTV/5.14.1.20007; InfoPath.1; .NET4.0C; WebMoney Advisor; .NET4.0E)"
        req0.Accept = "*/*"
        req0.Headers.Add(HttpRequestHeader.AcceptLanguage, "ru-RU")
        req0.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate")
        req0.KeepAlive = True
        req0.Host = "football.kulichki.net"
        req0.AutomaticDecompression = DecompressionMethods.GZip

        Dim urlcap As HttpWebResponse = DirectCast(req0.GetResponse, HttpWebResponse)
        'tmpOk0.Add(urlcap.Cookies)
        Dim tex As New StreamReader(urlcap.GetResponseStream(), Encoding.GetEncoding(1251))
        Dim pag As String = tex.ReadToEnd
        RichTextBox1.Text = pag
       ' RichTextBox1.Text = RichTextBox1.Text.Replace("UTF-8", "1251")
    End Sub
Ответ приходит в непонятных для IE символах.
Цитата:

<b>5-й тур.</b><br><br><b><a target="_blank" href="http://football.kulichki.net/russia2013/5/3.htm">Крылья Советов - Амкар - 0:2 (0:2).</a></b><br><b><a target="_blank" href="http://football.kulichki.net/russia2013/5/3.htm">Отчет</a></b> | <b><a target="_blank" href="http://football.kulichki.net/trans/2010/3186.htm">Текст</a></b> | <b><a target="_blank" href="http://football.kulichki.net/russia2013/5/3v.htm">Видео</a></b><br><img border="0" src="http://football.kulichki.net/league/goal.gif" width="10" height="10" hspace="3" vspace="0"></b></b>Бурмистров, 24 (0:1). Васильев, 45-с пенальти (0:2). <br><b>Крылья Советов:</b> Веремко, Голубев (Цаллагов, 32), Верховцов (Воробьев, 35), Епуряну, Жозеф-Рене, Немов, Петров, Баляйкин, Корниленко, Кабальеро, Себальос (Свежов, 56). <b>Амкар:</b> Нарубин, Мияйлович, Белоруков, Черенчиков, Сираков, Рябокобыленко (Волков, 74), Васильев, Гаглоев, Якубко (Пикущак, 60), Бурмистров, Игнатович (Блажич, 71).<br><br><b><a target="_blank" href="http://football.kulichki.net/russia2013/5/5.htm">Алания - Кубань - 2:1 (1:1).</a></b><br><b><a target="_blank" href="http://football.kulichki.net/russia2013/5/5.htm">Отчет</a></b>


Как перекодировать?

31K
23 августа 2012 года
reyn90
38 / / 07.06.2009
Дальше я сам должен думать? Куда капать та?
В сроке
Dim tex As New StreamReader(urlcap.GetResponseStream(), Encoding.GetEncoding(1251))
UTF8 не ставится!
277
23 августа 2012 года
arrjj
1.7K / / 26.01.2011
Dim tex As New StreamReader(urlcap.GetResponseStream(), Encoding.UTF8) ?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог