Всем,привет, я пишу прокси сервер, использовал для этого HttpListener. Все запросы идут через мой прокси сервер на пхп шлюз.
Прокси сервер:
namespace HtppListenerWebServer
{
class Program
{
static void Main(string[] args)
{
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);
**************************
Проблема в том, что юзая мой прокси (127.0.0.1:8561), в браузере отображается текстовый контент
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>
Почему контент в текстовом формате? Кто-нибудь может помочь?