Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с HttpListener + php gate 
:(
    Опции темы
alexfreeman
Дата 23.2.2012, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 16.7.2008

Репутация: нет
Всего: нет



Всем привет. Я пишу прокси сервер, использовал для этого 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.NameValueCollection 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.UserHostName) + "&Data=" + Program.EncodeTo64(headers); 
            byte[] byteArray = System.Text.ASCIIEncoding.UTF8.GetBytes(post_data);
            werequest.ContentLength = byteArray.Length;

            Stream dataStream = werequest.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close(); 
            
            HttpWebResponse response = (HttpWebResponse)werequest.GetResponse();
            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.GetBytes(toEncode);

            string returnValue

                  = System.Convert.ToBase64String(toEncodeAsBytes);

            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;
        }
    }
}

 http://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
Set-Cookie: last_visit_time=1329909761; expires=Sat, 21-Feb-2015 11:22:41 GMT; path=/
Pragma: no-cache
Cache-Control: no-cache, must-revalidate
Expires: Sat, 22 Nov 2003 14:18:11 GMT
X-robots-tag: noarchive
Content-Length: 1578
Connection: close
Content-Type: text/html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Documentation - System Favorites</title>
<meta name="description" content="TrueCrypt - free open-source disk encryption - documentation - System Favorites">
<meta name="keywords" content="encryption, security">
<meta name="robots" content="noarchive">
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7">
 
</head>
<frameset rows="113,*" frameborder="no" border="1" framespacing="0" >
  <frame src="/navigation" name="frameTCDocsNavBar" scrolling="no" noresize >
  <frameset rows="*" cols="182,685,*" frameborder="no" border="1" bordercolor="#0099FF" >
    <frame src="/docs/toc" name="frameTCDocsTOC" scrolling="yes" noresize topmargin="0" leftmargin="0" marginheight="0" marginwidth="0">
    <frame src="/docs/system-favorites" name="frameTCDocsMain" scrolling="yes" noresize marginheight="10" marginwidth="30">
    <frame src="/docs/rightbar" name="frameTCDocsRightBar" scrolling="no" noresize marginheight="0" marginwidth="0">
  </frameset>
</frameset>
</html>

Почему результат запроса отображается как текст ? Кто-нибудь может помочь?

Это сообщение отредактировал(а) alexfreeman - 23.2.2012, 12:34
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0738 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.