Как создать простой прокси в C#?

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

139
задан 10 revs, 4 users 97% 3 June 2018 в 07:21
поделиться

4 ответа

Можно создать один с HttpListener класс для прислушиваний к входящим запросам и HttpWebRequest класс для передачи запросов.

33
ответ дан 23 November 2019 в 23:21
поделиться

Браузер подключен к прокси так данные, которые прокси получает от веб-сервера, просто отправляется через то же соединение, которое браузер инициировал к прокси.

2
ответ дан 23 November 2019 в 23:21
поделиться

Прокси может работать следующим образом.

Шаг 1, настроить клиент для использования proxyHost: proxyPort.

Прокси-сервер является TCP-сервером, который прослушивает proxyHost: proxyPort. Браузер открывает соединение с прокси и отправляет Http-запрос. Прокси анализирует этот запрос и пытается определить заголовок «Host». Этот заголовок скажет Прокси, где открыть соединение.

Шаг 2: Прокси-сервер открывает соединение по адресу, указанному в заголовке «Хост». Затем он отправляет HTTP-запрос на этот удаленный сервер. Читает ответ.

Шаг 3: После чтения ответа с удаленного HTTP-сервера Прокси-сервер отправляет ответ через ранее открытое TCP-соединение с браузером.

Схематически это будет выглядеть так:

Browser                            Proxy                     HTTP server
  Open TCP connection  
  Send HTTP request  ----------->                       
                                 Read HTTP header
                                 detect Host header
                                 Send request to HTTP ----------->
                                 Server
                                                      <-----------
                                 Read response and send
                   <-----------  it back to the browser
Render content
19
ответ дан 23 November 2019 в 23:21
поделиться

Я бы не использовал HttpListener или что-то в этом роде, поэтому вы столкнетесь с таким количеством проблем.

Самое главное, это будет очень трудно поддерживать:

  • Proxy Keep-Alives
  • SSL не будет работать (правильно, вы получите всплывающие окна)
  • .NET библиотеки строго следует RFC, которые приводят к сбою некоторых запросов (даже если IE, FF и любой другой браузер в мире будут работать.)

Вам нужно сделать следующее:

  • Прослушать TCP-порт
  • Разобрать запрос браузера
  • Извлечение хоста подключиться к этому хосту на уровне TCP
  • Пересылать все туда и обратно, если вы не хотите добавлять собственные заголовки и т. Д.

Я написал 2 разных HTTP прокси в .NET с разными требованиями, и я могу сказать вам, что это лучший способ сделать это.

Mentalis делает это, но их код - «делегат спагетти»,

88
ответ дан 23 November 2019 в 23:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: