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();
            }
        }
        
    }
  • 相关阅读:
    项目支持
    PHP wamp 环境配置
    事务 锁 高并发下的解决方法
    Hybrid开发
    Phonegap IOS 篇 -如何用虚拟机发布APP
    Visual Studio 切换到设计模式卡死解决方法
    批处理基本命令
    Phonegap Android篇
    jQuery插件——Validation Plugin
    PHP PDO学习(二) exec执行SQL
  • 原文地址:https://www.cnblogs.com/bq12345/p/3440787.html
Copyright © 2011-2022 走看看