用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