Как проанализировать необработанный HTTP-ответ как HttpListenerResponse? - PullRequest
6 голосов
/ 11 мая 2010

Если у меня есть необработанный HTTP-ответ в виде строки:

HTTP / 1.1 200 OK
Дата: вторник, 11 мая 2010 г. 07:28:30 GMT
Истекает: -1
Cache-Control: приватный, max-age = 0
Content-Type: text / html; кодировка = UTF-8
Сервер: gws
X-XSS-защита: 1; Режим = блок
Подключение: закрыть

<!doctype html><html>...</html>

Есть ли простой способ, которым я могу разобрать его в HttpListenerResponse объект? Или, по крайней мере, какой-нибудь объект .NET, поэтому мне не нужно работать с необработанными ответами.

В настоящее время я занимаюсь извлечением пар ключ / значение заголовка и установкой их в HttpListenerResponse. Но некоторые заголовки не могут быть установлены, и тогда я должен вырезать тело ответа и записать его в OutputStream. Но тело может быть сжато, или это может быть изображение, которое я пока не могу получить. И некоторые ответы содержат случайные символы везде, что выглядит как проблема кодирования. Это много неприятностей.

Я получаю сырой ответ, потому что я использую SOCKS для отправки HTTP-запроса. Программа, над которой я работаю, в основном является HTTP-прокси, который может маршрутизировать запросы через SOCKS-прокси, как это делает Privoxy.

Ответы [ 2 ]

2 голосов
/ 18 мая 2010

Похоже, нет простого способа конвертировать их. Эти статьи помогли:

Как реализовать собственный прокси-сервер?

http://www.jeffcrossman.com/2009/08/27/using-httplistener-to-build-a-proxy

В итоге я сделал нечто очень похожее.

1 голос
/ 11 мая 2010

Возможно, вы захотите взглянуть на ResponseHeaders свойства Webclient:

WebClient wc = new WebClient();
wc.DownloadStringAsync(new Uri("http://www.foo.com"));

WebHeaderCollection myWebHeaderCollection = myWebClient.ResponseHeaders;

for (int i=0; i < myWebHeaderCollection.Count; i++)             
    Console.WriteLine ("\t" + myWebHeaderCollection.GetKey(i) + 
                       " = " + myWebHeaderCollection.Get(i));

Пожалуйста, скажите мне, если это не то, что вы искали.

...