С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
 Аватар для Zwelenewskiy
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651

Ответ на http запрос

17.01.2020, 15:49. Показов 2630. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Есть http-сервер (ниже обработчик запроса):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private HttpListener listener;
public void NewUser(object obj)
{
    HttpListenerContext context = (HttpListenerContext)obj;
    DateTime curDate = DateTime.Now;
 
    var request = context.Request;
    var response = context.Response;
    using (StreamReader input = new StreamReader(request.InputStream, Encoding.UTF8))
    {
        Console.WriteLine("Input: " + input.ReadToEnd() + "|");
 
        SendMessage(response, "HTTP/1.1 200 OK" + Environment.NewLine + "Access-Control-Allow-Origin: http://localhost" + Environment.NewLine + "Content-Type: text/html; charset=utf-8");
    }
}
Из расширения для chrome создается ajax-запрос:
JavaScript
1
2
3
4
5
6
7
8
9
$.ajax(
{
    url:"http://localhost:8888", 
    data: "Hallo", 
    uccess:function(result)
    {
        console.log('result: ' + result)
    }
});
В итоге на сервер приходит пустая строка. У StreamReader'a нет другого метода для чтения данных. Не пойму, почему данные не приходят
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.01.2020, 15:49
Ответы с готовыми решениями:

Ответ на Get запрос
на сайте крутиться код <html> <head> <title></title> <?php echo "wtf"; ?> ...

Как отправить запрос HTTP, а в ответ получаемую страницу не показывать пользователю?
Как отправить запрос HTTP, а в ответ получаемую страницу не показывать пользователю? я делаю это на Javascript но почему то получается...

HTTP авторизация - возвращает неверный ответ
Здравствуйте! Делаю запрос к сайту.Приходит вот такой ответ (прикрепленный файл). Внешне ответ выглядит почему то как исходный код страницы...

7
800 / 583 / 207
Регистрация: 21.02.2019
Сообщений: 2,095
17.01.2020, 15:51
..там опечатка в success ..?
0
 Аватар для Zwelenewskiy
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
17.01.2020, 17:23  [ТС]
carrotik, да, это уже исправлено =)) Но данные от ajax-запроса упорно не хотят передаваться

Добавлено через 13 минут
Параметры строки будут в
request.Url.PathAndQuery

Не туда воевал)

Добавлено через 1 час 12 минут
UPDATE. Есть другая проблема из этой же оперы. Все имена расширений запихиваю в строку:
Кликните здесь для просмотра всего текста
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
document.addEventListener('DOMContentLoaded', function() 
{
    chrome.management.getAll(function(info) 
    {       
        extenasions = '';
        info.forEach(function(item, i, arr) 
        {
            console.log(item.name)
            extenasions += item.name + ';';
        });
        
        //extenasions = "Презентации;Документы;Диск Google;Таблицы;Google Документы офлайн;AdBlock — лучший блокировщик рекламы;MyExtension;Gmail;Avast Online Security;";
        console.log(extenasions)
        
        $.ajax(
        {
            url:"http://localhost:8888", 
            data: extenasions, 
            success:function(result)
            {
                console.log('result: ' + result)
            }
        });
    });
    
}, false);


Часть сервера:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public void NewUser(object obj)
{
    HttpListenerContext context = (HttpListenerContext)obj;
    DateTime curDate = DateTime.Now;
 
    var request = context.Request;
    var response = context.Response;
    using (StreamReader input = new StreamReader(request.InputStream, Encoding.UTF8))
    {
        Console.WriteLine(request.Url.GetComponents(UriComponents.Query, UriFormat.SafeUnescaped));
 
        string s = OK";
        byte[] b = Encoding.UTF8.GetBytes(s);
 
        response.ContentType = "text/html; charset=utf-8";
        response.ContentLength64 = b.Length;
 
        response.OutputStream.Write(b, 0, b.Length);
 
        response.Close();                
    }
}


Довольно странная проблема: если extenasions забить руками, то строка возвращается корректная, иначе в таком виде:
%26%231055%3B%26%231088%3B%26%231077%3B% 26%231079%3B%26%231077%3B%26%231085%3B%2 6%231090%3B%26%231072%3B%26%231094%3B%26 %231080%3B%26%231080%3B

Для этого и используется request.Url.GetComponents(UriComponents. Query, UriFormat.SafeUnescaped). Но если руками вбивать строку - работает, иначе - нет. Магия какая-то =))
0
800 / 583 / 207
Регистрация: 21.02.2019
Сообщений: 2,095
17.01.2020, 18:14
Zwelenewskiy,
.. может, всё-таки, формировать ответ через JSON.Stringify(), чтобы данные шли через тело запроса? ... я правда, не в курсе, как там HttpListener это возьмет, но гугление говорит, что можно ...
0
 Аватар для Zwelenewskiy
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
17.01.2020, 18:35  [ТС]
carrotik, попробовал JSON.Stringify(). Эта функция просто сериализует объект. Т.е. строка превратится в строку =) На сервере приходит такая же ахинея

Добавлено через 3 минуты
Браузер при отправке кириллицы в параметре запроса кодирует ее. Т.е., по идее, это стандартное кодирование. Но найти метод борьбы с этим не получается
0
800 / 583 / 207
Регистрация: 21.02.2019
Сообщений: 2,095
17.01.2020, 18:45
.. я имел в виду, у вас же массив там в расширении приходит? .. ну, или сформировать его, а уже этот массив в JSON.Stringify() и как принято:

JavaScript
1
2
3
4
5
6
7
8
$.ajax({
                type: 'POST',
                url: mylistener,
                data: JSON.stringify(myarray),
                contentType: 'application/json; charset=utf-8',
                dataType: 'json'
                /// ...
                });
0
 Аватар для Zwelenewskiy
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
17.01.2020, 20:40  [ТС]
carrotik, результат тот же...

Добавлено через 8 минут
Боже, наконец-то: необходимо использовать encodeURIComponent(). Данная функции перекодирует строку в utf-8
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
17.01.2020, 22:08
Zwelenewskiy, Данная функции не перекодирует строку в utf-8.
Она изменяет все символы, за исключением следующих: латинские буквы, десятичные цифры, - _ . ! ~ * ' ( )
на техническую абракадабру, которую потом можно опять перекодировать в читаемый вид.
https://developer.mozilla.org/... IComponent
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.01.2020, 22:08
Помогаю со студенческими работами здесь

Http сервер и клиент. При попытке получить ответ клиента от сервера ошибка: Поток был недоступен для чтения
Здравствуйте, пытаюсь разобраться с написанием клиент-серверного приложения используя сокеты. Написал в одном консольном проекте сервер: ...

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

Почему ответ на GET запрос из Python отличается от ответа на GET запрос из HTTP Analyzer
Добрый день. Делаю GET запрос из HTTP Analyzer Указываю только адрес запроса: https://www.nn.ru/community/sp/food/ Получаю ответ -...

Как браузер узнает на какой http запрос пришел ответ
Отправил асинхронный запрос на сервер и не дожидаясь ответа отправил второй асинхронный запрос. На какой из этих запросов придет ответ?...

Как передать Http get запрос, вложить в него json с токеном и настройками и получить ответ
Здравствуйте, подскажите, уже поломал голову, на Node Js получается, обычные запросы тоже принимаю, а вот подключиться используя...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru