вопрос о веб клиенте

DropAndDrag
Уже с Приветом
Posts: 6018
Joined: 11 Mar 2011 05:36

вопрос о веб клиенте

Post by DropAndDrag »

никогда не занимался вебом и решил побаловаться ...

Code: Select all

System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)WebRequest.Create("https://en.wikipedia.org/wiki/Main_Page");
//System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)WebRequest.Create("https://forum.privet.com/");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
википедия уважительно присылает кучу байт, а привет шлет с черной меткой response.ContentLength = -1. Попытался взять cookies из response, добавить в request.CookieContainer и еще раз запросить request.GetResponse() ... не помогло.
подсказка бы не помешала :wink:
User avatar
Komissar
Уже с Приветом
Posts: 64875
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: вопрос о веб клиенте

Post by Komissar »

DropAndDrag wrote: 05 Jan 2018 08:31 никогда не занимался вебом и решил побаловаться ...

Code: Select all

System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)WebRequest.Create("https://en.wikipedia.org/wiki/Main_Page");
//System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)WebRequest.Create("https://forum.privet.com/");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
википедия уважительно присылает кучу байт, а привет шлет с черной меткой response.ContentLength = -1. Попытался взять cookies из response, добавить в request.CookieContainer и еще раз запросить request.GetResponse() ... не помогло.
подсказка бы не помешала :wink:
Вас зовут Сабина? :o
shadow7256
Уже с Приветом
Posts: 9392
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: вопрос о веб клиенте

Post by shadow7256 »

Ну вообще

Code: Select all

request.GetResponse()
не обязан вам вернуть моментально все тело ответа. Вам нужно попытаться прочитать его.
DropAndDrag
Уже с Приветом
Posts: 6018
Joined: 11 Mar 2011 05:36

Re: вопрос о веб клиенте

Post by DropAndDrag »

shadow7256 wrote: 05 Jan 2018 16:08 Ну вообще

Code: Select all

request.GetResponse()
не обязан вам вернуть моментально все тело ответа. Вам нужно попытаться прочитать его.
так он вообще возвращает НИЧЕГО в content. и сколько имена других параметров в response не смотрел никаких мыслей не возникло, кроме cookies ...
DropAndDrag
Уже с Приветом
Posts: 6018
Joined: 11 Mar 2011 05:36

Re: вопрос о веб клиенте

Post by DropAndDrag »

Komissar wrote: 05 Jan 2018 08:32
DropAndDrag wrote: 05 Jan 2018 08:31 никогда не занимался вебом и решил побаловаться ...

Code: Select all

System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)WebRequest.Create("https://en.wikipedia.org/wiki/Main_Page");
//System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)WebRequest.Create("https://forum.privet.com/");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
википедия уважительно присылает кучу байт, а привет шлет с черной меткой response.ContentLength = -1. Попытался взять cookies из response, добавить в request.CookieContainer и еще раз запросить request.GetResponse() ... не помогло.
подсказка бы не помешала :wink:
Вас зовут Сабина? :o
спасибо за подсказку :wink:
shadow7256
Уже с Приветом
Posts: 9392
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: вопрос о веб клиенте

Post by shadow7256 »

Попробуйте использовать класс WebClient
User avatar
Medium-rare
Уже с Приветом
Posts: 9195
Joined: 04 Mar 2011 03:04
Location: SFBA

Re: вопрос о веб клиенте

Post by Medium-rare »

Найдите по ссылке контекст response.GetResponseStream ().
Лет надцать палкой не трогалъ.
... and even then it's rare that you'll be going there...
DropAndDrag
Уже с Приветом
Posts: 6018
Joined: 11 Mar 2011 05:36

Re: вопрос о веб клиенте

Post by DropAndDrag »

Medium-rare wrote: 06 Jan 2018 02:02 Найдите по ссылке контекст response.GetResponseStream ().
Лет надцать палкой не трогалъ.
спасибо!
этот пример и терзал, но уже после HttpClient класса, и "ContentLength = -1" меня смутило и до GetResponseStream () не дошел.
... полученную string запихнул в Html Agility Pack библиотеку ... вроде бы все слова видны ...
DropAndDrag
Уже с Приветом
Posts: 6018
Joined: 11 Mar 2011 05:36

Re: вопрос о веб клиенте

Post by DropAndDrag »

какой-то пипец!
привет выдал иноформацию через GetResponseStream(), а другой сайт не выдал.
зато выдал через Html Agility Pack библиотеку.
кто-нибудь может указать место, где об всех этих извращениях написано по-людски
Palych
Уже с Приветом
Posts: 13682
Joined: 16 Jan 2001 10:01

Re: вопрос о веб клиенте

Post by Palych »

Не знаю как в .Net, в Java есть два стрима: output & error
В зависимости от http code данные будут в одном или в другом, но никогда - в обоих.
User avatar
Medium-rare
Уже с Приветом
Posts: 9195
Joined: 04 Mar 2011 03:04
Location: SFBA

Re: вопрос о веб клиенте

Post by Medium-rare »

Строго говоря, ждать результат прямо в стеке функции, где словили стрим, не кошерно. Ибо задержка совершенно arbitrary, а объём данных заранее не известен. HTTP Response объект (или что-то для него) *лучше* должен иметь обработчик события, и по завершению передачи, либо порционно, читать result в соответствующем callback. Что в C#, что в Жабе, что в Qt. Просто асинхронные коммуникации. Но такие подробные развёрнутые ответы чаще пишут в stackoverflow, а здесь клуб доброжелательного общения. :)
... and even then it's rare that you'll be going there...
tau
Уже с Приветом
Posts: 514
Joined: 07 Dec 2001 10:01
Location: toronto

Re: вопрос о веб клиенте

Post by tau »

Если response генерится на лету, или в случае chunked transfer, content length заранее не известен. Так что это как рах нормально для динамических ресурсов.
DropAndDrag
Уже с Приветом
Posts: 6018
Joined: 11 Mar 2011 05:36

Re: вопрос о веб клиенте

Post by DropAndDrag »

скорее всего -1 означает, что страница динамическая.
а может и ссылку можете дать, где поля хорошо расписаны?
tau
Уже с Приветом
Posts: 514
Joined: 07 Dec 2001 10:01
Location: toronto

Re: вопрос о веб клиенте

Post by tau »

DropAndDrag wrote: 08 Jan 2018 00:52 скорее всего -1 означает, что страница динамическая.
а может и ссылку можете дать, где поля хорошо расписаны?
Сложно с айпада ссылки править, на w3.org все описания. Если нужна точная ссылка, то могу завтра поутру найти.
-1 это, видимо, default значение, когда http message не содержит content-length совсем. Потому что значение 0 может быть дано явно, когда message body отсутствует.
User avatar
Medium-rare
Уже с Приветом
Posts: 9195
Joined: 04 Mar 2011 03:04
Location: SFBA

Re: вопрос о веб клиенте

Post by Medium-rare »

Это то, что нужно для чтения в принципе любой страницы по HTTP. Async оно работает => больше писать, но тут даже вовсе не злобный билл г виноват. Знакомиться с внутренностями w3c можно, но не обязательно.
... and even then it's rare that you'll be going there...
tau
Уже с Приветом
Posts: 514
Joined: 07 Dec 2001 10:01
Location: toronto

Re: вопрос о веб клиенте

Post by tau »

Можно, конечно, вообще ничего не читать, кроме stackoverflow. Оно и так работает, если не нужен массовый download гигабайтных файлов.
Но иногда приходится лезть в дебри и читать до посинения, про отличия HTTP1 от HTTP1.1 и прочую муйню. Я вот, например, недавно выяснил, что win следует спецификации HTTP1.1 и не хочет устанавливать более 2 соединений к одному хосту, а хочет всё пайплайнить унутре. Причём, в отличие от iOS, системы явного описания приоритетов вроде нету.
Но если надо чего-нить бысто наляпать, а-ля agile, то можно и с stackoverflow скопипастить. Все джентельмены это делают.
User avatar
Medium-rare
Уже с Приветом
Posts: 9195
Joined: 04 Mar 2011 03:04
Location: SFBA

Re: вопрос о веб клиенте

Post by Medium-rare »

Ну дык, если сами пишете в stackoverflow, то не жгёт позор за бесцельно прожитые.
И вовсе не stackoverflow даёт программисту большую часть побед, а принципы.
Но быстро в форум запостить, когда надо долго говорить, ведь уже у них спросили.
... and even then it's rare that you'll be going there...

Return to “Вопросы и новости IT”