How to code a simple proxy server c?

Asked By 20 points N/A Posted on -
qa-featured

Hello experts,

I am just wondering if how to code a simple proxy server c?

In order to access proxy servers we need to do this.

Can you give me some information regarding this matter so that I will be able to understand more about how I will be going to make a coding technique?

Thank you guys.

SHARE
Best Answer by Cagara Adryan
Best Answer
Best Answer
Answered By 0 points N/A #172464

How to code a simple proxy server c?

qa-featured
Hello Martha,
 
I am going to show you a simple multi-threaded Java HTTP Proxy Server. 
 
This is just a sample and not fully functional for every application. It’s very simple and works fine for HTTP GET requests, but it is not coded to handle properly neither HTTP POST requests nor any other HTTP methods. This is just an example to show how simple it is to proxy requests. This one records the URL of all requests those are passed through it.
 
I am going to show you two codes. The code give below is a multithreaded server. The code is as follow:
 
Package proxy;
 
import java.net.*;
import java.io.*;
 
public class ProxyServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = null;
        boolean listening = true;
 
        int port = 10000; //default
        try {
            port = Integer.parseInt(args[0]);
        } catch (Exception e) {
            //ignore me
        }
 
        try {
            serverSocket = new ServerSocket(port);
            System.out.println("Started on: " + port);
        } catch (IOException e) {
            System.err.println("Could not listen on port: " + args[0]);
            System.exit(-1);
        }
 
        while (listening) {
            new ProxyThread(serverSocket.accept()).start();
        }
        serverSocket.close();
    }
}
 
The above code just starts up the proxy server on a given port, takes in an HTTP request, and spawns off the request to a new thread passing the socket to the thread, and starts that thread on the request.
 
The following second code is a thread that starts up, and then receives the incoming request from the client. It is as follow:
 
package proxy;
 
import java.net.*;
import java.io.*;
import java.util.*;
 
public class ProxyThread extends Thread {
    private Socket socket = null;
    private static final int BUFFER_SIZE = 32768;
    public ProxyThread(Socket socket) {
        super("ProxyThread");
        this.socket = socket;
    }
 
    public void run() {
        //get input from user
        //send request to server
        //get response from server
        //send response to user
 
        try {
            DataOutputStream out =new DataOutputStream(socket.getOutputStream());
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
 
            String inputLine, outputLine;
            int cnt = 0;
            String urlToCall = "";
            ///////////////////////////////////
            //begin get request from client
            while ((inputLine = in.readLine()) != null) {
                try {
                    StringTokenizer tok = new StringTokenizer(inputLine);
                    tok.nextToken();
                } catch (Exception e) {
                    break;
                }
                //parse the first line of the request to find the url
                if (cnt == 0) {
                    String[] tokens = inputLine.split(" ");
                    urlToCall = tokens[1];
                    //can redirect this to output log
                    System.out.println("Request for : " + urlToCall);
                }
 
                cnt++;
            }
            //end get request from client
            ///////////////////////////////////
 
 
            BufferedReader rd = null;
            try {
                //System.out.println("sending request//to real server for url: " //        + urlToCall);
                ///////////////////////////////////
                //begin send request to server, get response from server
                URL url = new URL(urlToCall);
                URLConnection conn = url.openConnection();
                conn.setDoInput(true);
                //not doing HTTP posts
                conn.setDoOutput(false);
                //System.out.println("Type is: "//+ conn.getContentType());
                //System.out.println("content length: "//+ conn.getContentLength());
                //System.out.println("allowed user interaction: "//+ conn.getAllowUserInteraction());
                //System.out.println("content encoding: "//+ conn.getContentEncoding());
                //System.out.println("content type: "//+ conn.getContentType());
 
                // Get the response
                InputStream is = null;
                HttpURLConnection huc = (HttpURLConnection)conn;
                if (conn.getContentLength() > 0) {
                    try {
                        is = conn.getInputStream();
                        rd = new BufferedReader(new InputStreamReader(is));
                    } catch (IOException ios) {
                        System.out.println("********* IO EXCEPTION **********: " + ios);
                    }
                }
                //end send request to server, get response from server
                ///////////////////////////////////
 
                ///////////////////////////////////
                //begin send response to client
                byte by[] = new byte[ BUFFER_SIZE ];
                int index = is.read( by, 0, BUFFER_SIZE );
                while ( index != -1 )
                {
                  out.write( by, 0, index );
                  index = is.read( by, 0, BUFFER_SIZE );
                }
                out.flush();
 
                //end send response to client
                ///////////////////////////////////
            } catch (Exception e) {
                //can redirect this to error log
                System.err.println("Encountered exception: " + e);
                //encountered error – just send nothing back, so
                //processing can continue
                out.writeBytes("");
            }
 
            //close out all resources
            if (rd != null) {
                rd.close();
            }
            if (out != null) {
                out.close();
            }
            if (in != null) {
                in.close();
            }
            if (socket != null) {
                socket.close();
            }
 
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
 
 
Hope it was helpful for you… 

 

Answered By 5 points N/A #172465

How to code a simple proxy server c?

qa-featured

Hello,

You can get the basic knowledge and a bit idea from the code i am showing to you. It's a simple HTTP Proxy Server Code using C. You can get the basic idea and write your own code by seeing it. I have attached the sample code, download it and write your own code.

Hope this helps you out

Related Questions