zoukankan      html  css  js  c++  java
  • Java网络编程实例---------------------------------Java HTTP代理程序

    在Internet设置代理服务器为127.0.0.1:8000 其他浏览器使用IE设置

    package org.bq;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.StringTokenizer;
    
    /**
     * 用Webkit内核浏览器可以运行成功,但是IE却有时候会出现问题
     * 返回到浏览器端的HTML不能正确显示,但的确是返回了
     * @author 白强
     * @version 1.0 2013-11-19
     * 
     */
    public class Proxy {
    
        public Proxy() throws IOException {
    
            ServerSocket server = new ServerSocket(8000);
            int socketNo = 1;
            while (true) {
                Socket socket = server.accept();
                System.out.println("----Start For socket No" + socketNo + "------");
                System.out.println("The socket name ======="
                        + socket.getInetAddress().getHostName());
                ProxtThread task = new ProxtThread(socket);
                new Thread(task).start();
                socketNo++;
            }
        }
    
        public static void main(String[] args) throws Exception {
            new Proxy();
        }
    
    }
    class ProxtThread implements Runnable{
        
        private Socket socket;
    
        public ProxtThread(Socket socket) {
            this.socket=socket;
        }
    
        @Override
        public void run() {
            String reqs = "";
            String hostName = "";
            Integer port = 80;
            try{
            // 定义从浏览器得到的请求信息Reader
            
                    BufferedReader serverReader = new BufferedReader(new InputStreamReader(
                            socket.getInputStream()));
                    // 向浏览器返回数据
                    PrintWriter serverWriter = new PrintWriter(socket.getOutputStream());
                    String request = "";
                    // 得到请求的首行
                    request = serverReader.readLine();
    
                    System.out.println(request);
                    // 对首行进行分析,以空格为界拆分字符串
                    StringTokenizer st = new StringTokenizer(request, " ");
                    reqs = st.nextToken();
                    System.out.println(reqs);
                    // 得到请求URL
                    String http = st.nextToken();
                    String hostWithPort;
                    if (http.startsWith("http://")) {
                        // 子串
                        hostWithPort = http.substring(7, http.indexOf("/", 7));
                        // 如果有冒号就是指定端口拆分
                        if (hostWithPort.indexOf(":") != -1) {
                            StringTokenizer stPort = new StringTokenizer(hostWithPort, ":");
                            hostName = stPort.nextToken();
                            port = new Integer(stPort.nextToken());
                        }
                        // 不然就是80了
                        else {
                            hostName = hostWithPort;
                            port = 80;
                        }
                        // 打印请求URL
                        System.out.println(hostName);
                    }
                    /*
                     * Ready,可以向Internet发送数据了
                     */
                    Socket client = new Socket(hostName, port);
    
                    PrintWriter clientWriter = new PrintWriter(client.getOutputStream());
                    //我试过www.nwpu.edu.cn;www.baidu.com;www.163.com
                    BufferedReader clientReader = new BufferedReader(new InputStreamReader(
                            client.getInputStream()));
    
                    System.out.println("write to socket:" + request);
    
                    int count = 0;
                    while ((request != null) && (count < 8)) {
                        System.out.println(request);
                        count++;
                        if (request.contains("Accept-Encoding:")) {
                            System.out.println("contain:" + request);
                        } else
                            clientWriter.println(request);
                        request = serverReader.readLine();
                    }
                    clientWriter.println("
    ");
                    clientWriter.flush();
                    // 接受得到Response
                    String response = new String();
                    response = clientReader.readLine();
    
                    System.out.println(response);
    
                    while (!(response.equals(""))) {
                        System.out.println(response);
                        response = clientReader.readLine();
    
                    }
                    System.out.println(response);
                    
                    System.out.println("Start Receiving HTML ...");
                    while ((response = clientReader.readLine()) != null) {
                        serverWriter.println(response);
                    }
    
                    serverWriter.flush();
    
                    System.out.println("Finished!!!");
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
        
    }
  • 相关阅读:
    ExecuteScalar requires the command to have a transaction when the connection assigned to the command is in a pending
    如何从vss中分离程序
    String or binary data would be truncated
    the pop3 service failed to retrieve authentication type and cannot continue
    The POP3 service failed to start because
    IIS Error he system cannot find the file specified _找不到页面
    pku2575Jolly Jumpers
    pku2940Wine Trading in Gergovia
    pku3219二项式系数
    pku1029false coin
  • 原文地址:https://www.cnblogs.com/bq12345/p/3440787.html
Copyright © 2011-2022 走看看