一個可以作為代理服務器或者轉發的java類

jopen 10年前發布 | 78K 次閱讀 java類 Java開發

項目中用到,這里把它給簡化和通用了,突出基本思路,具體可以基于這個類來修改。

基于java容器和servlet。

    package com.xxx.first;  

    import java.io.BufferedReader;  
    import java.io.IOException;  
    import java.io.InputStream;  
    import java.io.InputStreamReader;  
    import java.io.OutputStream;  
    import java.io.PrintWriter;  
    import java.net.HttpURLConnection;  
    import java.net.URL;  
    import javax.servlet.http.HttpServletRequest;  
    import javax.servlet.http.HttpServletResponse;  
    import org.apache.commons.compress.utils.IOUtils;  

    public class SimpleProxy {  

        /** 
         * 使用GET提交到目標服務器。 
         *  
         * @param request 
         * @param response 
         * @param targetUrl 
         * @throws IOException 
         */  
        private void get(HttpServletRequest request, HttpServletResponse response,  
            String targetUrl) throws IOException {  

        URL url = new URL(targetUrl);  


        BufferedReader in = new BufferedReader(new InputStreamReader(  
            url.openStream()));  

        String line;  
        PrintWriter out = response.getWriter();  
        while ((line = in.readLine()) != null) {  
            out.println(line);  
        }  
        out.flush();  
        in.close();  
        }  

        /** 
         * 使用POST提交到目標服務器。 
         *  
         * @param request 
         * @param response 
         * @param targetUrl 
         * @throws IOException 
         */  
        private void post(HttpServletRequest request, HttpServletResponse response,  
            String targetUrl) throws IOException {  
        URL url = new URL(targetUrl);  
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();  

        // 發送POST請求必須設置如下兩行  
        conn.setDoOutput(true);  
        conn.setDoInput(true);  
        conn.setRequestMethod("POST");  
        // 可以拷貝客戶端的head信息作為請求的head參數  
        // conn.setRequestProperty("Charsert", "UTF-8");  
        conn.setRequestProperty("Content-Type", "application/json");  

        // 直接把客戶端的BODY傳給目標服務器  
        OutputStream send = conn.getOutputStream();  
        InputStream body = request.getInputStream();  
        IOUtils.copy(body, send);  
        send.flush();  
        send.close();  
        body.close();  

        // 獲取返回值  
        BufferedReader in = new BufferedReader(new InputStreamReader(  
            conn.getInputStream()));  
        PrintWriter out = response.getWriter();  
        String line;  
        while ((line = in.readLine()) != null) {  
            out.println(line);  
        }  
        out.flush();  
        }  

    }  

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!