Как получить куки из Response в новый Request?
1.Итак, я создаю первый запрос HttpWebRequest
В перехвате запросов
Cookie PHPSESSID=7titft7nuut3d22mqtdg67f1c4; _ym_visorc=w
ВОПРОС: Как получить программно строку Cookie PHPSESSID=7titft7nuut3d22mqtdg67f1c4; _ym_visorc=w ????
Не то что бы не знают....
Я делал один раз запросы с редиректом.... бррр , тупее и бесперспективнее работы не было (тупо пришлось все варианты попробовать - делал подобные запросы из обычного браузера, ловил сниффером, и свои подстраивал, чтобы были один в один).
там все очень зависимо от сайта, которому вы шлете запросы. То, что нашел я - не факт что вообще будет правильно у вас.
Нет, в url PHPSESSID добавляется только если в браузере не разрешены куки, или на сервере принудительно настроено. У тебя явно снифером видно, что сессия передается в куках, так что всё нормально должно быть, с url ты ничего не должен делать.
Просто всем, как и тебе неохота писать пример по msdn, а сразу получить готовое. Могу дать ссылок: CookieContainer.GetCookies CookieCollection.Count CookieCollection.Item Cookie.Name Cookie.Value тебе осталось приложить минимум фантазии и логики чтоб решить свою проблему.
Нет, в url PHPSESSID добавляется только если в браузере не разрешены куки, или на сервере принудительно настроено. У тебя явно снифером видно, что сессия передается в куках, так что всё нормально должно быть, с url ты ничего не должен делать.
URL генерируется по кукам т.е. http://tralya.lya/index.php?сессия из кук
Просто всем, как и тебе неохота писать пример по msdn, а сразу получить готовое.
... ... ...
тебе осталось приложить минимум фантазии и логики чтоб решить свою проблему.
Ошибочка вышла, у меня есть готовое, просто мне как и всем нужно не пугать людей огромными кодами.
Ваши ссылки не помогли, а вот человек на паралельном форуме помог. Вот смотрите:
TextBox3.Text = res.Headers("Set-Cookie")
TextBox3.Text = TextBox3.Text.Replace("PHPSESSID=", "")
TextBox3.Text = TextBox3.Text.Replace("; path=/", "")
Ещё вопрос: Зачем создан этот форум?
Ваши ссылки не помогли, а вот человек на паралельном форуме помог. Вот смотрите:
TextBox3.Text = res.Headers("Set-Cookie")
TextBox3.Text = TextBox3.Text.Replace("PHPSESSID=", "")
TextBox3.Text = TextBox3.Text.Replace("; path=/", "")
Ссылки не помогли по причине, что я описал в прошлом посте, повторюсь - ты хочешь получить готовое и не хочешь чучуть подумать.
Тебе предложили велосипед с квадратными колесами. Добавится новая кука или зайдешь с уже имеющимися и всё ппц.
Правильней сделать как в примере:
Ещё вопрос: Зачем создан этот форум?
Тут заставляют людей думать, а не советуют всякую ересь. Будь готов к тому что тебя тут могут оскорбить, унизить и высмеять, но тебя направят на путь истинный :D
Тут заставляют людей думать, а не советуют всякую ересь. Будь готов к тому что тебя тут могут оскорбить, унизить и высмеять, но тебя направят на путь истинный :D
Тогда вопрос не по VB.NET а по PHP: Почему в методе ПОСТ снифер не перехватил строку с данными, но Length установил? Я по этому Length с горем пополам собрал запрос, и количество символов совпало. Завтра буду проверять код.
На этот вопрос вы меня тоже думать заставите? Я даже ответа не знаю, раньше показывал, а ща нет. Мне кажется из-за винды. Я чёрную копию использую по этому.
Тогда вопрос не по VB.NET а по PHP: Почему в методе ПОСТ снифер не перехватил строку с данными, но Length установил? Я по этому Length с горем пополам собрал запрос, и количество символов совпало. Завтра буду проверять код.
На этот вопрос вы меня тоже думать заставите? Я даже ответа не знаю, раньше показывал, а ща нет. Мне кажется из-за винды. Я чёрную копию использую по этому.
Запрос может быть из нескольких пакетов, вероятно сниффер просто их не объеденил. Дело в том что на пакеты режет уже сетевой протокол. Ну и может снифер такой? Может плагином каким нибудь к браузеру посмотришь запросы?
Запрос может быть из нескольких пакетов, вероятно сниффер просто их не объеденил. Дело в том что на пакеты режет уже сетевой протокол. Ну и может снифер такой? Может плагином каким нибудь к браузеру посмотришь запросы?
У меня опера, на неё сниферов не видел.
Объясните следующее:
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 данных?
2) Pragma no-cache вроде тебе не нужен - это обычно серверный заголовок, чтоб пользователь не кешировал страницу, а каждый раз заново запрашивал
3) все куки кроме PHPSESSID устанавливаются другими сайтами (конкретно тут yandex (вебвизор) и google (google analytics) т.к. в проге ты их скрипты со странички не обрабатываешь то и нет ихних кук. можешь смело игнорировать - они не нужны.
4) пост данные должны быть в формате name=value&name2=value2&...&nameN=valueN если так и есть, то у тебя всё правильно.
5) чтоб передвать куки между разными запросами просто используй для них один контейнер
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
<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>
Как перекодировать?
В сроке
Dim tex As New StreamReader(urlcap.GetResponseStream(), Encoding.GetEncoding(1251))
UTF8 не ставится!