设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2076|回复: 2
打印 上一主题 下一主题

[讨论] 常用的http脚本 防IE的缓存机制

[复制链接]

Lv2.观梦者

梦石
0
星屑
681
在线时间
791 小时
注册时间
2011-10-20
帖子
2394

开拓者

跳转到指定楼层
1
发表于 2013-8-9 23:18:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
  1. class Get_Http_Info
  2.   AGENT = "RGSS PLAYER"
  3.   INTERNET_OPEN_TYPE_PRECONFIG = 0 # IEの設定を仕様
  4.   INTERNET_OPEN_TYPE_DIRECT = 1 # プロキシを使用しない
  5.   
  6.   def Get_Http_Info.InternetOpen()
  7.     io = Win32API.new('wininet', 'InternetOpen', %(p, l, p, p, l), 'l')
  8.     hInternet = io.call(AGENT, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 1)
  9.     return hInternet
  10.   end
  11.   
  12.   def Get_Http_Info.InternetOpenUrl(hSession, url)
  13.     iou = Win32API.new('wininet', 'InternetOpenUrl', %(l, p, p, l, l, l), 'l')
  14.     hService = iou.call(hSession, url, nil, 0, 0, 0)
  15.     return hService
  16.   end
  17.   
  18.   def Get_Http_Info.InternetReadFile(hService,length,bk)
  19.     content = ""
  20.    
  21.     read_size = 1024 # 一次读入文件的尺寸
  22.     irf = Win32API.new('wininet', 'InternetReadFile', %(l, p, i, p), 'i')
  23.     bk.call(0,length)
  24.     id=0
  25.     while(true)
  26.       buf = "\0" * read_size
  27.       red = [0].pack('L')
  28.       irf.call( hService, buf, read_size, red)
  29.       bk.call(id*read_size,length)
  30.       id+=1
  31.       # 读到文件末端
  32.       break if (red.unpack('L') == [0])
  33.       #buf.delete!("\0")
  34.       buf = buf[0, red.unpack('L')[0]]
  35.       content += buf
  36.     end
  37.     return content
  38.   end
  39.   
  40.   HTTP_QUERY_STATUS_CODE = 19
  41.   CONTENT_LENGTH=5
  42.   def Get_Http_Info.HttpQueryInfo(hService)
  43.     read_size = 1024
  44.     buf = "\0" * read_size
  45.     red = [read_size-1].pack('L')
  46.     hqi = Win32API.new('wininet', 'HttpQueryInfo', %(l, l, p, p, p), 'i')
  47.     isOk = hqi.call( hService, HTTP_QUERY_STATUS_CODE, buf, red, nil)
  48.     buf.delete!("\0")
  49.     return buf
  50.   end
  51.   
  52.   def Get_Http_Info.InternetCloseHandle(hInternet)
  53.     ich = Win32API.new('winInet', 'InternetCloseHandle', %(l), 'i')
  54.     isOk = ich.call(hInternet)
  55.     return isOk
  56.   end
  57.   
  58.   HTTP_CODE_OK = "200"
  59.   def Get_Http_Info.HttpQuerySize(hService)
  60.     read_size = 1024
  61.     buf = "\0" * read_size
  62.     red = [read_size-1].pack('L')
  63.     hqi = Win32API.new('wininet', 'HttpQueryInfo', %(l, l, p, p, p), 'i')
  64.     isOk = hqi.call( hService, CONTENT_LENGTH, buf, red, nil)
  65.     buf.delete!("\0")
  66.     return buf
  67.   end
  68.   def Get_Http_Info.get_info(url)
  69.     info = nil
  70.     begin
  71.       hInternet = InternetOpen()
  72.       if (hInternet != 0)
  73.         hService = InternetOpenUrl(hInternet, url)
  74.         if (hService != 0)
  75.           status_code = HttpQueryInfo(hService)
  76.           if (status_code == HTTP_CODE_OK)
  77.             info = InternetReadFile(hService)
  78.           end
  79.           InternetCloseHandle(hService)
  80.         end
  81.         InternetCloseHandle(hInternet)
  82.       end
  83.     rescue
  84.       # 例外发生
  85.       return nil
  86.     end
  87.     ary = []
  88.     info.each_line do |line|
  89.       next if line.empty?
  90.       ary.push line
  91.     end
  92.     return ary[271].scan(/\w+<\/a>/)
  93.   end
  94.   
  95.   def Get_Http_Info.get_html(url,bk)
  96.     info = nil
  97.    # begin
  98.       hInternet = InternetOpen()
  99.       if (hInternet != 0)
  100.         hService = InternetOpenUrl(hInternet, url)
  101.         
  102.         if (hService != 0)
  103.           status_code = HttpQueryInfo(hService)
  104.           length=HttpQuerySize(hService).to_i
  105.           if (status_code == HTTP_CODE_OK)
  106.             #a=File.open(pathname,"wb")
  107.             info = InternetReadFile(hService,length,bk)
  108.           end
  109.           InternetCloseHandle(hService)
  110.         end
  111.         InternetCloseHandle(hInternet)
  112.       end
  113.     #rescue
  114.       # 例外发生
  115.     #  return nil
  116.     #end
  117.    
  118.     return info
  119.   end
  120.   
  121. end
复制代码
脚本是利用IE的,我以前就发现读取一个php或者其他页面如txt,他返回的是旧的页面。
我们一定访问到了缓存,查了wininet啥也不懂,
把开头的INTERNET_OPEN_TYPE_DIRECT = 0
改成INTERNET_OPEN_TYPE_DIRECT = 1
资料:

function InternetOpen(lpszAgent: PChar;  
dwAccessType: DWORD;  
lpszProxy,   
lpszProxyBypass:PChar;   
dwFlags: DWORD

dwFlags
标记,一般设置为
0
,可以是:
   
1

INTERNET_FLAG_DONT_CACHE
不在缓存中保存取得的内容
  
2

INTERNET_FLAG_OFFLINE
脱机方式


---------------------------------------------------------
改成1之后,还是读取到了旧的信息(post之后无刷新网页的旧页面)
---------------------------------------------------------
查阅相关之后,俺被API逼疯了,后来终于得到了一种解决办法:
在那个读取的php后面改成php?xx=rand xxx
以使得IE“自作聪明”的优化得以屏蔽

也就是ruby代码:"http://xxx.net/cs.php?a=#{rand 1000000000}"
之后就躲开了他的缓存,
求讨论一下,各位大触,如何不用这种渣办法,(参数之类的办法)禁止缓存?
欢迎点此进入我的egames.wink.ws,有RMQQ堂等

[url=http://rpg.blue/thread-317273-1-1.html]短篇八-赶选

http://yun.baidu.com/share/link?shareid=2158225779&uk=169642147&third=0


历险ARPG赢回你的疆域新的战斗模式?…………点击这里:[宋乱贼狂 for QQ堂]
http://rpg.blue/group-368-1.html
programing ....?
[url=http://rpg.blue/thrd-234658-1-1.html]

Lv3.寻梦者

梦石
0
星屑
1624
在线时间
1609 小时
注册时间
2007-8-28
帖子
3253

第3届短篇游戏大赛主流游戏组冠军第1届Title华丽大赛新人奖

2
发表于 2013-9-3 19:58:08 | 只看该作者
自己建立post數據包發送,等待返回,不讀取php頁面,讀取一定有出錯的幾率。
“我推荐你一个游戏吧,avg的,剧情特感人”
“我擦,都是文字图片的游戏有啥好玩的,连个战斗都没有!”
“我推荐你一个游戏吧,rpg的,战斗也新颖”
“我擦,怎么米有作i弊器?“
”你不是喜欢战斗么?”
“不,我是剧情党!!”

继续阅读请点击
http://rpg.blue/blog-53316-10027.html
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
帖子
1839

开拓者

3
发表于 2013-9-4 01:30:17 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-28 14:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表