ブラウザとイカのプロキシ間で実行される小さな HTTP プロキシを構築しています。ブラウザは HTTP リクエストをプロキシに送信し、プロキシはそれを squid プロキシにリダイレクトします。その後、アプリケーションは squid プロキシから応答を取得し、それをブラウザに返します。
問題は、プロキシから完全な応答を取得できないことです。HTTP 200 OK ... (応答ヘッダーのみ) を取得しますが、本文がない場合は、もう一度受信メソッドを呼び出して本文を取得する必要があります。しかし、コードをデバッグすると (アプリケーションが遅くなります)、すべての応答 (応答ヘッダーと本文) が得られます。ここに私のコードがあります:
static void Main(string[] args)
{
int ServerPort = 8888;
IPAddress localHost = new IPAddress(0x0100007f);
TcpListener listener = new TcpListener(localHost,ServerPort);
listener.Start();
while(true)
{
string requestString = "";
String respenseString = "";
TcpClient application = listener.AcceptTcpClient();
string source = application.Client.RemoteEndPoint.ToString();
byte[] dataFromApp = new byte[application.ReceiveBufferSize];
application.Client.Receive(dataFromApp);
TcpClient tunnel = new TcpClient("127.0.0.1",8080);
tunnel.Client.Send(dataFromApp);
while (tunnel.Client.Connected ==true)
{
if(tunnel.Available != 0)
{
byte[] responseFromProxy = new byte[tunnel.ReceiveBufferSize];
tunnel.Client.Receive(responseFromProxy);
respenseString += Encoding.UTF8.GetString(responseFromProxy);
}
else
{
break;
}
}
application.Client.Send(Encoding.UTF8.GetBytes(respenseString));
}