ajax跨域访问地本代理的初步研究

本文介绍了一个使用Java编写的AJAX代理Servlet,该Servlet能够帮助解决跨域问题。通过POST请求方式,将目标URL作为参数传递,并指定字符集,代理会获取目标URL的内容并返回给客户端。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用java写个ajax 的proxy. (servlet):

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Proxy extends HttpServlet {

 /**
  *
  */
 private static final long serialVersionUID = 1L;

 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  doPost(req, resp);
 }

 @Override
 protected void doPost(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  req.setCharacterEncoding("utf-8");
  resp.setCharacterEncoding("utf-8");
  PrintWriter out = resp.getWriter();
  
  String charSet = req.getParameter("charSet");
  if(charSet == null){
   charSet = "utf-8";
  }
  String newUrl = req.getQueryString();
  newUrl = newUrl.replace("url=", "");
  //System.out.println(newUrl+"\n"+charSet);
  
  URL url = new URL(newUrl);
  InputStreamReader inread = new InputStreamReader(url.openStream(), "ISO-8859-1");
  BufferedReader readBuffer = new BufferedReader(inread);
  String readtext;
  StringBuffer stringBuffer = new StringBuffer();
  while((readtext = readBuffer.readLine()) != null){
   String s = new String(readtext.getBytes("ISO-8859-1"),charSet);
   stringBuffer.append(s);
   out.println(s);
   System.out.println(s);
  }
 }

 @Override
 public void init(ServletConfig config) throws ServletException {
  // TODO Auto-generated method stub
  super.init(config);
 }

 @Override
 public void destroy() {
  // TODO Auto-generated method stub
  super.destroy();
 }
 
 
}

------------------------:

相关ajax就不写了(大家都看到ajax跨域这一块,相信ajax已了解不少了),ajax请求的url写成类似这样:"我们自己的代理页面?url=对方访问地址(?参数1=value&参数2=value...);例如:open("POST","proxy?url=http://www.baidu.com/s?bs=ajax&f=8&rsv_bp=1&wd=ajax&inputT=0",false)。还有重要的一步就是send()方法,这里我只传个转换编码(一般要和我们本站的编码一致),如:send("charSet=utf-8"),这个一定要明白,出现乱码时多半就在这里。

    这当前这个servlet还是不理想,因为它只对一些页面内用绝对路径或用了<base..>Element的起作用。(大家可以想想为什么)。

   不过这个代理也不是没有限制的,比如对方作用了防盗链你就不可以了(你能想到为什么吗)。

    要工作了,有时间再来交流。


当然,如果哪位有更好的方案不防那出来交流下(一个人的思路有限,多个人的思想交流后就会是N*N的效果,不是吗?)。

转载请保留作者谢谢:http://blog.youkuaiyun.com/zax0zax


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值