最简单的方法就是在自己的服务器上添加一个代理,客户端脚本先把请求发送给代理,代理转发请求,把响应发回给客户端脚本。为此我做了一个简单的Servlet来完成此功能,思路很简单,就是对请求的URL打开一个URLConnection,然后读取流写到servlet的响应即可。
比如一个RSS阅读器,它需要访问某个RSS网址,客户端脚本先把RSS网址发送给servlet,servlet访问此网址,把响应发回即可。
java 代码
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- String urlString = request.getParameter(”url”);
- writeResponse(response, urlString);
- }
- private void writeResponse(HttpServletResponse response, String urlString) throws ServletException{
- try {
- URL url = new URL(urlString);
- URLConnection urlConnection = url.openConnection();
- response.setContentType(urlConnection.getContentType());
- InputStream ins = urlConnection.getInputStream();
- OutputStream outs = response.getOutputStream();
- byte[] buffer = new byte[READ_BUFFER_SIZE];
- int bytesRead = 0;
- while ((bytesRead = ins.read(buffer, 0, READ_BUFFER_SIZE)) != -1) {
- outs.write(buffer, 0, bytesRead);
- }
- outs.flush();
- outs.close();
- ins.close();
- } catch (Exception e) {
- try {
- response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage());
- } catch (IOException ioe) {
- throw new ServletException(ioe);
- }
- }
- }