espnstarsky 发表于 2011-2-27 22:41

【新闻】突破WAP网关限制

突破wap网关限制               就目前找到的资料wap网关限制大文件的下载,是因为wap网关在手机客户端拿到文件之前就已经知道要下载的文件大小,这是因为文件的大小从http协议中可以得到,http头中保存的不止文件的大小,还有文件的类型等一些列信息,按照现在的猜测,网关限制大文件下载是根据文件的content-length来判断文件的大小。
解决思路:在wap网关和文件服务器之间加一层代理服务器,网关请求过来只到代理服务器,而不会到真正访问到你的资源你服务器。代理服务器按照客户端的请求参数每次去文件服务器上拿取文件。
技术关键点:
1.  代理服务器与文件服务器之间连接的建立
2.  输入流和输出流,字节偏移量的设定(代理服务器)
3.  代理服务器输出文件类型
代码实现:
public class DownServlet extends HttpServlet {
    private static final long serialVersionUID = 1332534778678L;
    private static final int byte_size = 1024;
    protected void service(HttpServletRequest request,
           HttpServletResponse response) throws ServletException, IOException {
       response.setContentLength(byte_size); // 输出到客户端的文件大小
       String fileName ="default.dmh";
       response.setContentType("text/plain");
       response.setCharacterEncoding("utf-8");
       response.setHeader("Content-disposition", "attachment; filename="
              + fileName);                              // 设置文件头
       String url = request.getParameter("url");
       URL fileUrl = new URL(url);
       HttpURLConnection httpCon= (HttpURLConnection) fileUrl
              .openConnection();
//     System.out.println("before range.........."+httpCon.getResponseCode());
       String sProperty ="bytes=10-" + byte_size;      // -后面表示要取多少数据
       httpCon.setRequestProperty("RANGE", sProperty); // 设置偏移量
       System.out.println("after range.........."+httpCon.getResponseCode());
       InputStream in = httpCon.getInputStream();
       System.out.println("after InputStream.........."+httpCon.getResponseCode());
       DataInputStream dis = new DataInputStream(in); // 重新包装输入流
       OutputStream out = response.getOutputStream(); // 从httpUrlConnecction中获得输出流
       byte[] b = new byte;               // 读取多少
       dis.read(b);
       out.write(b);
       out.flush();
       out.close(); // 关闭输入输出流
       dis.close();
       in.close();
    }
}
出现问题:
1.  设置偏移量对文件服务器不起作用
经过测试发现只有代理服务器请求文件服务器上的静态文件时,设置偏移量才能使用,请求动态的则不行,猜测原因是请求动态的文件是因为设置的一些底层的参数到不了服务器底层,如:apache等。
2.  设置偏移量“-”后的大小
“-”后设置多少表是此次请求从偏移量之后取多少数据,此过程会限制httpCon.getInputStream()的大小,在使用read读取时读取的大小就是“-”后的大小,若读取过大则在后面补空格。

zz243 发表于 2011-2-27 22:53

技术贴 帮顶下 坐等结果

oldwan621 发表于 2011-2-27 23:09

比较深奥

piku 发表于 2011-2-27 23:16

用net接入点的,似乎没有遇到过这个问题。

lxq8432 发表于 2011-2-27 23:48

记号

技术贴要顶。

cmnest 发表于 2011-2-27 23:55

虽然看不懂,技术贴要顶

移动G3 发表于 2011-2-28 00:29

好牛B啊

kyqxy 发表于 2011-2-28 09:42

专业人士贴,旁观。

大鱼篓 发表于 2011-2-28 15:35

技术贴必定顶起来感谢分享

kckp 发表于 2011-2-28 15:47

技术贴!!!

HOOP 发表于 2011-2-28 16:42

那是什么代码

八零三 发表于 2011-2-28 17:39

学习中,看结果

wzp05 发表于 2011-2-28 18:54

技术贴,顶下来。期待解决办法!

lianguse 发表于 2011-2-28 19:37

技术贴必定顶起来感谢分享

飞歌传输 发表于 2011-3-1 09:48

哪个wap卡限制下载文件大小啊?我用的移动和电信的好象没有遇到啊

guomuyi5262 发表于 2011-3-1 11:26

不是很明白,你是要说什么?还是要问什么?^^?

emptyw 发表于 2011-3-1 12:41

顶了   期待解决。。。

四眼胖子 发表于 2011-3-1 16:57

顶技术贴 慢慢学习

dvdqueen 发表于 2011-3-1 21:10

大小倒是不感冒 就是限制多点感冒

gmwhhh 发表于 2011-3-1 21:26

技术贴,看不懂,请解释一下吧

移动G3 发表于 2011-3-5 03:55

懂得哥们讨论起来啊

myccer 发表于 2011-3-5 06:34

喜欢技术贴
页: [1]
查看完整版本: 【新闻】突破WAP网关限制