|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
23.02.2012, 13:48 | #1 |
Новичок
Джуниор
Регистрация: 09.09.2008
Сообщений: 1
|
Проблемы с HttpListener + php gate
Всем привет, я пишу прокси сервер, использовал для этого HttpListener. Все запросы идут через мой прокси сервер на пхп шлюз.
Прокси сервер: namespace HtppListenerWebServer { class Program { static void Main(string[] args) { if (!HttpListener.IsSupported) { //Console.WriteLine("Windows XP SP2 or Server 2003 is required to use the HttpListener class."); return; } HttpListener listener = new HttpListener(); listener.Prefixes.Add("http://*:8561/"); while (true) { listener.Start(); IAsyncResult result = listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener); Console.WriteLine("Waiting for request to be processed asyncronously."); result.AsyncWaitHandle.WaitOne(); Console.WriteLine("Request processed asyncronously."); } listener.Close(); } public static void ListenerCallback(IAsyncResult result) { HttpListener listener = (HttpListener)result.AsyncState; HttpListenerContext context = listener.EndGetContext(result); HttpListenerRequest request = context.Request; System.Collections.Specialized.Name ValueCollection headersCollection = request.Headers; string headers = ""; foreach (string key in headersCollection.AllKeys) { string[] values = headersCollection.GetValues(key); headers += key + ": " + values[0] + "\r\n"; } headers = request.HttpMethod + " " + request.RawUrl + " HTTP/1.0\r\n" + headers + "\r\n"; HttpWebRequest werequest = WebRequest.Create("http://phpProxy1") as HttpWebRequest; werequest.Method = "POST"; werequest.ContentType = "application/x-www-form-urlencoded"; string post_data = "host=" + Program.EncodeTo64(request.UserHost Name) + "&Data=" + Program.EncodeTo64(headers); byte[] byteArray = System.Text.ASCIIEncoding.UTF8.GetB ytes(post_data); werequest.ContentLength = byteArray.Length; Stream dataStream = werequest.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); dataStream.Close(); HttpWebResponse response = (HttpWebResponse)werequest.GetRespo nse(); using (Stream receiveStream = response.GetResponseStream()) { HttpListenerResponse responseOut = context.Response; responseOut.ContentLength64 = response.ContentLength >= 0 ?response.ContentLength : 0; int bytesCopied = CopyStream(receiveStream, responseOut.OutputStream); responseOut.OutputStream.Close(); Console.WriteLine("Copied {0} bytes", bytesCopied); } } static public string EncodeTo64(string toEncode) { byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.Get Bytes(toEncode); string returnValue = System.Convert.ToBase64String(toEnc odeAsBytes); return returnValue; } public static int CopyStream(Stream input, Stream output) { byte[] buffer = new byte[32768]; int bytesWritten = 0; while (true) { int read = input.Read(buffer, 0, buffer.Length); if (read <= 0) break; output.Write(buffer, 0, read); bytesWritten += read; } return bytesWritten; } } } phpProxy1 - пхп шлюз: $host = base64_decode($_POST['host']); $Data = base64_decode($_POST['Data']); $stream = fopen('data://text/plain,' . $Data,'r'); $fsok = fsockopen($host, 80, $errno, $errstr, 20); $BuffLen = 4096; if($fsok) { while ($wbuffer = fread($stream , $BuffLen)) { fwrite($fsok, $wbuffer); } fflush($fsok); while ($rbuffer = fread($fsok, $BuffLen)) { echo $rbuffer; } } fflush($fsok); fclose($fsok); Проблема в том, что юзая мой прокси, в браузере я получаю текстовый контент HTTP/1.1 200 OK Date: Wed, 22 Feb 2012 11:22:41 GMT Server: Apache Почему результат запроса отображается как текст ? Кто-нибудь может помочь? |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
проблемы с php | D@rkArt | PHP | 2 | 23.02.2012 14:22 |
Проблемы с kcaptcha (php) | AVF83 | PHP | 5 | 20.01.2012 19:38 |
Бесплатная замена Spider Gate | SVGuss | Безопасность, Шифрование | 1 | 21.03.2011 12:55 |