Click here to Skip to main content
6,595,444 members and growing! (21,375 online)
Email Password   helpLost your password?
General Programming » Internet / Network » Internet and networks     Intermediate

How to create a simple proxy in Managed C++

By Albert Pascual

How to create a simple proxy to parse HTTP to another server using Managed C++
C++/CLI, Windows, .NET 1.0, Visual Studio, Dev
Posted:14 Apr 2002
Updated:20 Apr 2002
Views:97,924
Bookmarked:23 times
Announcements
Loading...
 
Search    
Advanced Search
Add to IE Search
printPrint   add Share
      Discuss Discuss   Broken Article?Report  
42 votes for this article.
Popularity: 6.46 Rating: 3.98 out of 5
1 vote, 16.7%
1

2
2 votes, 33.3%
3

4
3 votes, 50.0%
5

Introduction

Many people have been asking me about a how to create a proxy. Actually is very simple to do in Managed C++. This article is made very simple, you can add as much as you want at the base class we can call it CHttpProxy

I'll be using the known class  TcpClient.

// Header File

// CHttpProxy.h 

__gc class CHttpProxy 
{ 
public: 
    CHttpProxy(String __gc *szHost, int port); 
    String __gc *m_host; 
    int m_port; 
    unsigned char SendToServer(unsigned char Packet __gc[]) __gc[]; 
};

// CHttpProxy.cpp

#using <mscorlib.dll>
#using <SYSTEM.DLL>
using namespace System;
using System::Net::Sockets::TcpClient;
using System::String;
using System::Exception;
using System::Net::Sockets::NetworkStream;
#include "httpproxy.h"


#include <stdio.h>


CHttpProxy::CHttpProxy(String __gc *szHost, int port)
{
    m_host = szHost;
    m_port = port;
    
}

unsigned char CHttpProxy::SendToServer(unsigned char    Packet __gc[]) __gc[]
{
    TcpClient * tcpclnt = new TcpClient();
    unsigned char bytes __gc[];  

    try
    {
        tcpclnt->Connect(m_host,m_port); 
    }

    catch (Exception  * e )
    {
        Console::WriteLine(e->ToString());
          return NULL;
    }

    // Send it

    if ( tcpclnt )
    {
        NetworkStream * networkStream =  tcpclnt->GetStream();

        int size = Packet->get_Length();        
        networkStream->Write(Packet, 0, size);

        bytes = new unsigned char __gc[tcpclnt->ReceiveBufferSize];
    
        networkStream->Read(bytes, 0, (int) tcpclnt->ReceiveBufferSize);

        return (bytes);
    }

    return (NULL);
}

Simple isn't it? This class creates a connection to the "real" IIS server.

So(...) How to use it now? Simpler than bowling water, you may remember this part of the code from my previous article:

TcpListener * pTcpListener;
TcpListener = new TcpListener(80);
TcpListener->Start(); 
TcpClient * pTcpClient; 
unsigned char  sendbytes __gc[];
pTcpClient = m_TcpListener->AcceptTcpClient();
NetworkStream * networkStream = pTcpClient->GetStream();
bytes = new unsigned char __gc[tcpCl->ReceiveBufferSize];
networkStream->Read(bytes, 0, (int) tcpCl->ReceiveBufferSize);

// Now we got the request

Console::WriteLine(S"Packet Received");            
CHttpProxy    *pProxy; 
pProxy    = new CHttpProxy(S"www.codeproject.com", 80);    // Goes somewhere else!

sendbytes = pProxy->SendToServer(bytes);
networkStream->Write(sendbytes, 0 , sendbytes->get_Length());
networkStream->Close();

We listen on port 80 for any connection. Anything that comes in that port is re-directed to www.codeproject.com It's actually a pretty easy concept. The most interesting part comes when you get the buffer. You got the control to remove images from the HTML or change the content on the fly.

In my next article will look into those possibilities.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Albert Pascual


Member
Al is just another Software Engineer working in C++, ASp.NET and C#. Enjoys snowboarding in Big Bear, and wait patiently for his daughters to be old enough to write code and snowboard.

Al is a Microsoft ASP.NET MVP

Blog
Occupation: Web Developer
Location: United States United States

Other popular Internet / Network articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 9 of 9 (Total in Forum: 9) (Refresh)FirstPrevNext
GeneralAn example ? Pinmemberahmo99gmail1:53 19 Aug '08  
QuestionDownload link PinmemberKishan Hathiwala3:36 11 Jul '08  
GeneralVery good sample PinmemberMember 14036349:21 4 Jun '08  
GeneralSimpler than bowling water? Pinmembercoolman54533:35 29 Mar '07  
GeneralC# Example? Pinmemberplehxp0:35 16 Dec '05  
GeneralRe: C# Example? Pinmembersf4all10:25 19 May '06  
GeneralMain Class? Pinmembervalente12:22 1 Nov '03  
GeneralFor VC++? PinmemberKasper B12:53 5 May '02  
GeneralRe: For VC++? PinmemberAlbert Pascual7:00 6 May '02  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 20 Apr 2002
Editor: Chris Maunder
Copyright 2002 by Albert Pascual
Everything else Copyright © CodeProject, 1999-2009
Web15 | Advertise on the Code Project