Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Strassebahn
Member

Откуда: Болонья, Италия
Сообщений: 1092
Помогите пожалуйста разобраться с HttpListener.
скачал пример с интернета,
на строке

HttpListenerContext context = listener.GetContext();


виснет, да и строка
listener.Prefixes.Add(s);

исполняется несколько секунд, хотя комп новый.
Пробовал тот же код на другом компе - тот же "успех"

Внизу - полные исходники.

Хотелось бы знать что у меня не так и может скинет кто-то опытному ламеру работающий пример?



using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            if (!HttpListener.IsSupported)
            {
                Console.WriteLine("Windows XP SP2 or Server 2003 is required to use the HttpListener class.");
                return;
            }

            var prefixes = new List<string>() { "http://lenta/" };

            // Create a listener.
            HttpListener listener = new HttpListener();
            // Add the prefixes.
            foreach (string s in prefixes)
            {
                listener.Prefixes.Add(s);
            }
            listener.Start();
            Console.WriteLine("Listening...");
            while (true)
            {
                // Note: The GetContext method blocks while waiting for a request.
                HttpListenerContext context = listener.GetContext();

                HttpListenerRequest request = context.Request;

                string documentContents;
                using (Stream receiveStream = request.InputStream)
                {
                    using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8))
                    {
                        documentContents = readStream.ReadToEnd();
                    }
                }
                Console.WriteLine($"Recived request for {request.Url}");
                Console.WriteLine(documentContents);

                // Obtain a response object.
                HttpListenerResponse response = context.Response;
                // Construct a response.
                string responseString = "<HTML><BODY> Hello world!</BODY></HTML>";
                byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
                // Get a response stream and write the response to it.
                response.ContentLength64 = buffer.Length;
                System.IO.Stream output = response.OutputStream;
                output.Write(buffer, 0, buffer.Length);
                // You must close the output stream.
                output.Close();
            }
            listener.Stop();
        }
    }
}
1 июн 19, 11:33    [21899411]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
hVostt
Member

Откуда:
Сообщений: 16012
Strassebahn
http://lenta/


Откуда это взялось? Что за lenta? Хотя бы в hosts прописал? А права есть на прослушивание?
2 июн 19, 01:18    [21899670]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72921
Strassebahn
виснет при вызове HttpListenerContext.GetContext();

Он не виснет, он начинает ожидать запроса.

Чтобы он смог ответить на запрос, студия должна быть запущена от имени администратора (на 7ке не уверен, но на 10ке точно), имя lenta должно резолвиться в комп, на котором поднят HttpListener, на компе должен быть открыт 80й порт.

Для начала попробуйте Prefixes.Add($"http://*/") и обратиться по http://localhost.
2 июн 19, 09:18    [21899717]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72921
автор
Windows XP SP2 or Server 2003 is required
or upper тогда уж. А то как это на 10ке у меня все работает?)

автор
listener.Stop();
Не имеет смысла без выхода из цикла while (true). И с выходом тоже не имеет - listener и так прихлопнется при выходе из программы.
2 июн 19, 09:26    [21899718]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72921
автор
исполняется несколько секунд

попробуйте просто
listener.Prefixes.Add("http://*/");

без листов и циклов.
2 июн 19, 10:14    [21899725]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Arm79
Member

Откуда: МО, Раменское
Сообщений: 3670
вообще то https://www.lenta.ru/
2 июн 19, 12:59    [21899759]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Arm79
Member

Откуда: МО, Раменское
Сообщений: 3670
И еще момент забыл сказать, listner - это же свой сервер
поэтому любой символьный адрес должен быть в host
поэтому не парьтесь и просто укажите ip адрес
2 июн 19, 13:09    [21899763]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Arm79
Member

Откуда: МО, Раменское
Сообщений: 3670
а то сверху я протупил ), решил, что идет запрос к ленте.ру )
2 июн 19, 13:09    [21899764]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Arm79
Member

Откуда: МО, Раменское
Сообщений: 3670
Запускаем от имени администратора, через браузер набираем http://127.0.0.1:9988 и видим название метода GET
			HttpListener lst = new HttpListener();
			lst.Prefixes.Add("http://127.0.0.1:9988/");
			lst.Start();

			var ctx = lst.GetContext();

			Console.WriteLine(ctx.Request.HttpMethod);

			Console.ReadKey();
2 июн 19, 13:24    [21899768]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Strassebahn
Member

Откуда: Болонья, Италия
Сообщений: 1092
hVostt,

www.lenta.ru - новостной сайт :)
3 июн 19, 10:27    [21900173]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Strassebahn
Member

Откуда: Болонья, Италия
Сообщений: 1092
Antonariy,

Запущено от имени администратора
3 июн 19, 10:28    [21900176]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Strassebahn
Member

Откуда: Болонья, Италия
Сообщений: 1092
Arm79,

то есть
listener.Prefixes.Add("https://www.google.com/");

без указания в host работать не будет?
3 июн 19, 10:36    [21900182]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Arm79
Member

Откуда: МО, Раменское
Сообщений: 3670
Strassebahn
Arm79,

то есть
listener.Prefixes.Add("https://www.google.com/");


без указания в host работать не будет?

Не знаю, я бредовые версии не отрабатываю ))
3 июн 19, 11:38    [21900239]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Arm79
Member

Откуда: МО, Раменское
Сообщений: 3670
скорее всего запустится, и будет перехватывать все запросы с локального компьютера, адресованные гуглу
3 июн 19, 11:39    [21900241]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Strassebahn
Member

Откуда: Болонья, Италия
Сообщений: 1092
Arm79,

всё равно виснет на
HttpListenerContext context = listener.GetContext();


в гугл с браузер заходил, выполнял запросы, ничего не нет, виснет и всё;
:(
3 июн 19, 14:15    [21900516]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Arm79
Member

Откуда: МО, Раменское
Сообщений: 3670
А может быть вы скажете, какую задачу пытаетесь решить?
3 июн 19, 14:35    [21900541]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Strassebahn
Member

Откуда: Болонья, Италия
Сообщений: 1092
Arm79,

нужно обработать GET и POST запросы с сайта, почти целиком состоящего из flash

Обычно сайты парсятся через HttpWebRequest, но у этого все нужные индексы скрыты в flash-компонентах.

Через Fiddler видны GET и POST запросы/ответы (request/response)
это именно то что нужно вытянуть

Хочу написать WinForm программу, в одной вкладке вебраузер,
во второй - визуализация программной обработки GET и POST от внутреннего браузера

То есть программа с встроенным браузером и обработчиком HTTP responces от этого браузера.
3 июн 19, 15:02    [21900575]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Arm79
Member

Откуда: МО, Раменское
Сообщений: 3670
Так может просто поднять слушатель (HttpListener) на 127.0.0.1 на каком-нибудь порту, а в браузере указать этот адрес в качестве обычного прокси?

Вот например ссылка на такой прокси https://github.com/krolth/Http-Proxy-dotnet/blob/master/Proxy.cs
3 июн 19, 15:28    [21900608]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Strassebahn
Member

Откуда: Болонья, Италия
Сообщений: 1092
Arm79,

спасибо, попробую
3 июн 19, 16:20    [21900679]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Strassebahn2
Member

Откуда:
Сообщений: 12
Arm79,

Привет
сколько возьмёшь чтобы написать простейшую но работающую программу по HttpListener?

(Меня забанили на 3 дня за офтопик)
5 июн 19, 10:40    [21902223]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Arm79
Member

Откуда: МО, Раменское
Сообщений: 3670
Задача не простейшая
1. Нужно уметь перехватить запрос,
2. один в один повторить его для внешнего ресурса
3. принять или не принять риски того, что ssl-запросы не будут обрабатываться или браузер будет ругаться из-за отсутствия доверия к сертификату
4. Добавить точки интеграции для внедрения управления поведением для отдельных запросов.

В общем, полет фантазии неисчерпаем

А простейшую (лог запросов) - попробую написать в выходные, покажу результат - устроит, договоримся
5 июн 19, 14:11    [21902520]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Strassebahn2
Member

Откуда:
Сообщений: 12
Arm79,

Достаточно WinForm с двумя в вкладками, в одной WebBbrowser

в другой отображать исходящие Http GET/POST запросы, fiddler2:

GET https://www.google.com/ HTTP/1.1
Host: www.google.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate, br


Можна оформить работу через Upwork,

или по PayPal либо что-то вам оплачу кредиткой на оговоренную сумму

ваш скайп или вайбер?
5 июн 19, 16:55    [21902759]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Strassebahn2
Member

Откуда:
Сообщений: 12
Arm79,

Ну, это работает если есть обращение к этому IPEndPoint (я написал тест, нормально пошло).

А как заставить именно компонент WebBrowser с WinForm программы слать свои запросы в этот IPEndPoint?
7 июн 19, 12:20    [21904403]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Arm79
Member

Откуда: МО, Раменское
Сообщений: 3670
Легко )) я в Питере, ещё не успел нормально посидеть за ноутом, но есть в app.config настройка прокси. Веб браузер автоматом её подхватит
7 июн 19, 16:39    [21904722]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Strassebahn2
Member

Откуда:
Сообщений: 12
Arm79
Легко )) я в Питере, ещё не успел нормально посидеть за ноутом, но есть в app.config настройка прокси. Веб браузер автоматом её подхватит


Да, я нашёл пример, но что-то пошло не так

Нужна помощь с написанием программы - в одной вкладке webbrowser, во второй Listbox с исходящими Http запросами

Winform c WebBrowser и скриншоты что нужно я вам вышлю, чтобы сэкономить время
HttpListener, TCPListener - реализация не имеет значения
Готов расстаться со 100 евро
skype circle__40
viber: +39 327 912 4149

П С FiddlerCore (https://www.telerik.com/fiddler/fiddlercore)возможно помог бы, но неохота тащить в программу сторонние компоненты
8 июн 19, 10:55    [21905089]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Arm79
Member

Откуда: МО, Раменское
Сообщений: 3670
у меня есть почта в профиле, пишите туда
11 июн 19, 07:10    [21906315]     Ответить | Цитировать Сообщить модератору
 Re: HttpListener: виснет при вызове HttpListenerContext.GetContext();  [new]
Strassebahn2
Member

Откуда:
Сообщений: 12
Всем спасибо,

проблему решил используя FiddlerCore,
весьма рекомендую :)
19 июн 19, 11:24    [21911334]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / WinForms, .Net Framework Ответить