Аватар для egorncpk
9 / 9 / 2
Регистрация: 04.12.2014
Сообщений: 83

Изменение http страницы в proxy сервере

18.02.2015, 19:18. Показов 2003. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Ребят, как просматривать и изменять код http страницы, которая проходит через мой прокси сервер?
есть вот такой код, но это для статус кода страницы
C#
1
2
3
  string CodeStr = Code.ToString() + " " + ((HttpStatusCode)Code).ToString();
  string Html = "<html><body><h1>" + CodeStr + "</h1></body></html>";
  string Str = "HTTP/1.1 " + CodeStr + "\nContent-type: text/html\nContent-Length:" + Html.Length.ToString() + "\n\n" + Html;
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.02.2015, 19:18
Ответы с готовыми решениями:

Проверить наличие http basic authentication на веб-сервере
Есть IP адрес / хостнейм и порт. Нужно проверить, доступен этот адрес без пароля или требуется логин+пароль для доступа. Мой вариант делает...

Что написать в заголовке, чтобы ASP страница не кэшировалась у клиента и на proxy-сервере?
Что написать в заголовке, чтобы ASP страница не кэшировалась у клиента и на proxy-сервере?

при сабмите на сервере должен сохраниться XML и он же послаться на другой сервер по HTTP на аппликацию CRM.
Привет всем! Помогите хотя бы советом.. ибо с XML никогда не работал... ситуация такова... есть форма.. при сабмите на сервере...

8
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
19.02.2015, 10:26
Исходя из кода у вас все в Html переменной. Изменять строку, я думаю, не так сложно.
0
 Аватар для egorncpk
9 / 9 / 2
Регистрация: 04.12.2014
Сообщений: 83
19.02.2015, 10:45  [ТС]
Цитата Сообщение от kenny69 Посмотреть сообщение
Исходя из кода у вас все в Html переменной. Изменять строку, я думаю, не так сложно.
то есть мне в можно вносить изменения в переменную Html и всё должно получиться? И сможешь написать пример как это будет выглядеть в моём случае?
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
19.02.2015, 11:05
Лучший ответ Сообщение было отмечено egorncpk как решение

Решение

Цитата Сообщение от egorncpk Посмотреть сообщение
то есть мне в можно вносить изменения в переменную Html и всё должно получиться?
Исходя из кода - да. Но я же не знаю кода твоего прокси сервера, так что здесь тяжело что-то гарантировать.
Цитата Сообщение от egorncpk Посмотреть сообщение
И сможешь написать пример как это будет выглядеть в моём случае?
В каком случае? Здесь же не написано где и что изменять? Здесь уже нужна конкретика.
Я бы делал использовал HtmlAgilityPack для работы с DOM.
В итоге получиться должно как-то так:
C#
1
2
3
4
5
6
var doc = new HtmlDocument();
doc.LoadHtml(html);
var textNodes = doc.DocumentNode.SelectNodes("/div/text()[contains(.,'specialSearchWord')]");//получил что надо изменить
if (textNodes != null)
    foreach (HtmlTextNode node in textNodes)
        node.Text = node.Text.Replace("specialSearchWord", "<a class='special' href='http://mysite.com/search/specialSearchWord'>specialSearchWord</a>");//изменил выбранные куски
И сохранил результат:
C#
1
2
3
4
5
using (StringWriter writer = new StringWriter())
{
    doc.Save(writer);
    result = writer.ToString();
}
0
 Аватар для egorncpk
9 / 9 / 2
Регистрация: 04.12.2014
Сообщений: 83
19.02.2015, 15:14  [ТС]
Цитата Сообщение от egorncpk Посмотреть сообщение
можно вносить изменения в переменную Html
Каким образом? Если у меня есть код java
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
19.02.2015, 15:36
А причем здесь java?
Javascript или Java (это разные языки).
0
 Аватар для egorncpk
9 / 9 / 2
Регистрация: 04.12.2014
Сообщений: 83
19.02.2015, 16:12  [ТС]
Цитата Сообщение от kenny69 Посмотреть сообщение
Javascript или Java (это разные языки).
Javascript

вот код сервера
C#
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Windows.Forms;
 
namespace HTTPServer
{
    static class Program
    {
        
        class Client
        {
            private void SendError(TcpClient Client, int Code)
            {
                string CodeStr = Code.ToString() + " " + ((HttpStatusCode)Code).ToString();
                string Html = "<html><body><h1>" + CodeStr + "</h1></body></html>";
                string Str = "HTTP/1.1 " + CodeStr + "\nContent-type: text/html\nContent-Length:" + Html.Length.ToString() + "\n\n" + Html;
                byte[] Buffer = Encoding.ASCII.GetBytes(Str);
                Client.GetStream().Write(Buffer, 0, Buffer.Length);
                Client.Close();
            }
 
            public Client(TcpClient Client)
            {
                string Request = "";
                byte[] Buffer = new byte[1024];
                int Count;
                while ((Count = Client.GetStream().Read(Buffer, 0, Buffer.Length)) > 0)
                {
                    Request += Encoding.ASCII.GetString(Buffer, 0, Count);
                    if (Request.IndexOf("\r\n\r\n") >= 0 || Request.Length > 4096)
                    {
                        break;
                    }
                }
                Match ReqMatch = Regex.Match(Request, @"^\w+\s+([^\s\?]+)[^\s]*\s+HTTP/.*|");
                if (ReqMatch == Match.Empty)
                {
                    SendError(Client, 400);
                    return;
                }
                string RequestUri = ReqMatch.Groups[1].Value;
                RequestUri = Uri.UnescapeDataString(RequestUri);
                if (RequestUri.IndexOf("..") >= 0)
                {
                    SendError(Client, 400);
                    return;
                }
                if (RequestUri.EndsWith("/"))
                {
                    RequestUri += "index.html";
                }
 
                string FilePath = "www/" + RequestUri;
                if (!File.Exists(FilePath))
                {
                    SendError(Client, 404);
                    return;
                }
                string Extension = RequestUri.Substring(RequestUri.LastIndexOf('.'));
                string ContentType = "";
                switch (Extension)
                {
                    case ".htm":
                    case ".html":
                        ContentType = "text/html";
                        break;
                    case ".css":
                        ContentType = "text/stylesheet";
                        break;
                    case ".js":
                        ContentType = "text/javascript";
                        break;
                    case ".jpg":
                        ContentType = "image/jpeg";
                        break;
                    case ".jpeg":
                    case ".png":
                    case ".gif":
                        ContentType = "image/" + Extension.Substring(1);
                        break;
                    default:
                        if (Extension.Length > 1)
                        {
                            ContentType = "application/" + Extension.Substring(1);
                        }
                        else
                        {
                            ContentType = "application/unknown";
                        }
                        break;
                }
 
                FileStream FS;
                try
                {
                    FS = new FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
                }
                catch (Exception)
                {
                    SendError(Client, 500);
                    return;
                }
 
                string Headers = "HTTP/1.1 200 OK\nContent-Type: " + ContentType + "\nContent-Length: " + FS.Length + "\n\n";
                byte[] HeadersBuffer = Encoding.ASCII.GetBytes(Headers);
                Client.GetStream().Write(HeadersBuffer, 0, HeadersBuffer.Length);
 
                while (FS.Position < FS.Length)
                {
                    Count = FS.Read(Buffer, 0, Buffer.Length);
                    Client.GetStream().Write(Buffer, 0, Count);
                }
 
                
                FS.Close();
                Client.Close();
            }
        }
 
        class Server
        {
            TcpListener Listener; 
 
            public Server(int Port)
            {
                Listener = new TcpListener(IPAddress.Any, Port); 
                Listener.Start();
                while (true)
                {
                    ThreadPool.QueueUserWorkItem(new WaitCallback(ClientThread), Listener.AcceptTcpClient());
 
                    /*
                    // Принимаем нового клиента
                    TcpClient Client = Listener.AcceptTcpClient();
                    // Создаем поток
                    Thread Thread = new Thread(new ParameterizedThreadStart(ClientThread));
                    // И запускаем этот поток, передавая ему принятого клиента
                    Thread.Start(Client);
                    */
                }
            }
 
            static void ClientThread(Object StateInfo)
            {
                new Client((TcpClient)StateInfo);
            }
 
            ~Server()
            {
                if (Listener != null)
                {
                    Listener.Stop();
                }
            }
            static void Main(string[] args)
            {
                int MaxThreadsCount = Environment.ProcessorCount * 7;
                ThreadPool.SetMaxThreads(MaxThreadsCount, MaxThreadsCount);
                ThreadPool.SetMinThreads(2, 2);
                new Server(80);
            }
        }
    }
}
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
19.02.2015, 17:10
У вас код исходной страницы в Request, если я правильно понял. Вот и работайте с ней через HtmlAgilityPack, как я писал выше. То, что на странице Javascript - ничего страшного. Только надо иметь ввиду, что если есть javascript, который работает с DOM, а вы измените страницу так, что заденет эти элементы, то javascript выполниться с ошибкой.
0
 Аватар для egorncpk
9 / 9 / 2
Регистрация: 04.12.2014
Сообщений: 83
21.02.2015, 14:05  [ТС]
Цитата Сообщение от kenny69 Посмотреть сообщение
код исходной страницы в Request
что то копаюсь уже второй день, мало чего понимаю :-( Можете помочь? Код который я вам сбросил походу не работает, при запуске пишет ошибку 404... Можете посмотреть что с ним не так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.02.2015, 14:05
Помогаю со студенческими работами здесь

File Upload используя HTTP, VB Application (standart EXE) на клиенте, компонент Internet Transfer на сервере ASP.
Мне надо саплоадить файл на сервер, используя HTTP, VB Application (standart EXE) на клиенте, компонент Internet Transfer, а на сервере...

Замена страницы сайта не сервере
Есть сайт на сервере. Как заменить (временно) первую страницу саита на сервере на страницу с с текстом &quot;Dear customers, these days...

вызвать на исполнение Http-обработчик на сервере
привет. на веб-сервере у меня есть htppHandler в котором генерится капча. на клиенте я успешно получаю эту капчу. все работает, но только я...

Поддержка PHP на HTTP сервере
У меня есть HTTP сервер написанный на C#, надо добавить поддержку PHP. Как это сделать?

Как проверить наличие файла на сервере по http?
В сети существует веб сервер. Мне нужно проверить существование файла по http или как либо ещё. Файл расположен в папке с разрешениями...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

Новые блоги и статьи
Как украсить новогоднюю елку с Q# и Qiskit
EggHead 24.06.2025
Что может быть необычнее, чем применить законы квантовой механики для украшения новогодней елки? Пока другие развешивают обычные гирлянды, я решил объединить свою страсть к квантовым вычислениям с. . .
Системы нулевого доверия на C#
UnmanagedCoder 24.06.2025
Традиционная архитектура безопасности работает по принципу средневекового замка: создаём высокие стены вокруг корпоративной сети, укрепляем ворота межсетевыми экранами и системами обнаружения. . .
Снова не мой путь. Циклическое среднее, я обеими руками за проверку условия, в ракурсе данной задачи - циклическое среднее в топку.
Hrethgir 24.06.2025
Привет. Такой вопрос - нужно выводить среднее математическое между двумя направлениями, интервал значений которых может лежать в диапазоне одного оборота по кругу. Проблема заключается в том, что. . .
Деплой Flask приложения
py-thonny 23.06.2025
За годы работы с Flask я натыкался на одни и те же грабли достаточно часто, чтобы наконец научится их обходить. И сегодня хочу поделится опытом, который сбережет вам немало нервных клеток. Начнем с. . .
WebAssembly и контейнеры в .NET Aspire для оркестрации распределенных архитектур
ArchitectMsa 23.06.2025
Я наблюдаю, как WebAssembly (или просто WASM) постепенно выходит за рамки своего первоначального предназначения — исполнения кода на стороне браузера. Теперь эта технология проникает в серверную. . .
Непрерывная интеграция для пакета Python
Mr. Docker 22.06.2025
Было 4 часа утра пятницы, когда я выпустил новую версию нашей внутренней библиотеки для обработки данных. Релиз 0. 5. 2 содержал небольшой фикс для обработки дат в ISO формате, что может пойти не так?. . .
Продвинутый ETL на C# из OLTP БД в хранилище
stackOverflow 22.06.2025
Работая в сфере корпоративной аналитики, я постоянно сталкиваюсь с одним и тем же - нужны чистые, структурированные и, главное, свежие данные. Без них современные аналитические системы, машинное. . .
Мастер-класс по микросервисам на Node.js
Reangularity 21.06.2025
Node. js стал одной из самых популярных платформ для микросервисной архитектуры не случайно. Его неблокирующая однопоточная модель и событийно-ориентированный подход делают его идеальным для. . .
Управление Arduino из WPF приложения
Wired 21.06.2025
Зачем вообще связывать Arduino с WPF-приложением? Казалось бы, у Arduino есть собственная среда разработки, своя экосистема, свои способы управления. Однако при создании серьезных проектов. . .
Звёздная пыль
kumehtar 20.06.2025
Я просто это себе представляю: как создавался этот мир. Как энергия слипалась в маленькие частички. Как они собирались в первые звёзды, как во вселенной впервые появился Свет. Как эти звёзды. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru