Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Можно создать один с HttpListener
класс для прислушиваний к входящим запросам и HttpWebRequest
класс для передачи запросов.
Браузер подключен к прокси так данные, которые прокси получает от веб-сервера, просто отправляется через то же соединение, которое браузер инициировал к прокси.
Прокси может работать следующим образом.
Шаг 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
Я бы не использовал HttpListener или что-то в этом роде, поэтому вы столкнетесь с таким количеством проблем.
Самое главное, это будет очень трудно поддерживать:
Вам нужно сделать следующее:
Я написал 2 разных HTTP прокси в .NET с разными требованиями, и я могу сказать вам, что это лучший способ сделать это.
Mentalis делает это, но их код - «делегат спагетти»,