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