找回密码
 加入
搜索
查看: 5625|回复: 12

[网络通信] 【已解决】我的post抢票程序,循环速度很慢是怎么回事?(无验证码)

  [复制链接]
发表于 2015-11-13 20:56:38 | 显示全部楼层 |阅读模式
本帖最后由 gyhhi 于 2015-12-17 17:57 编辑

内部的一个小网站,我做了个很简单的抢票程序,每天8点整网站开始放票,若还没到8点就抢票,网页会返回“尚未开始”的提示,下面的POST程序保证没问题,返回值正常,可以读到“尚未开始”,与httpwatch截获的内容一致。
为保证能抢到,我是7点59分就开始不停地post数据,for循环速度只有可怜的3~4次每秒,也就是相当于250毫秒才能提交一次,这速度有时候还不如手工···

关键程序在下面,不过只能在我们的内网使用,大家应该是运行不了。就是想让大伙看看,为什么循环的速度这么慢?????
(抢票时不需要验证码)
;前面是用POST登陆网站,内容略去,大家只看下面
MsgBox(0,"ok","登陆成功") 
 ;登陆成功,下面开始抢票
$PostPage='http://XXXXXXXXX已隐藏xxxx';抢票的post URL
$PostData='Command=GetTickets&Code=2&DateType=Today&TimeType=ALL&DeptID=1'        ;post内容是明文,而且是固定的

For $ii=1 To 100000         
        $xmlhttp.open("POST", $PostPage, True);异步模式->不用等待网站的回应。用同步模式会更慢
        $xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');头信息
        $xmlhttp.send($PostData);抢票
;~         $bodytext = BinaryToString($xmlhttp.responseBody, 4);
;~         ConsoleWrite($bodytext&@CR)
        ToolTip($ii);显示循环次数,用来观察抢票的速度
Next
 楼主| 发表于 2015-11-14 10:04:08 | 显示全部楼层
快来人那,大家帮我看看
 楼主| 发表于 2015-11-14 21:29:36 | 显示全部楼层
还没有人啊,a大大在哪里
发表于 2015-11-15 13:14:15 | 显示全部楼层
要是后台不限制同一IP或用户名的连接数的话,你用多线程去抢比较合适。
另外这些抢票不用提前太多时间POST,提前一两秒就可以了。
至于你程序慢的原因,一般应该是网络阻塞和后台服务器响应慢,换成winhttp试试。
 楼主| 发表于 2015-11-16 08:56:17 | 显示全部楼层
回复 4# tank

应该不是这个你说的这个原因,不知道不写cookie是不是会导致变慢?或者说我的程序的连接不能保持keep-active?每次post都得在他们服务器那里验证?
另外,确定不是网络阻塞,也不是服务器慢,因为没有验证码,我用_IEImgClick模拟点击,并检测返回值是否成功,发现速度能达到50+次/s。
发表于 2015-11-16 12:26:27 | 显示全部楼层
回复 1# gyhhi


    可以在你07至14行代码间 增加时间输出;看下 是那一步满了;
应该和你每次post都创建连接有关
发表于 2015-11-16 12:28:21 | 显示全部楼层
可以把连接 放在循环体外面,循环体内增加连接状态检测,发现超时或断开再重新连接
发表于 2015-11-18 09:01:26 | 显示全部楼层
想问下LZ,你不用创建对象? $xmlhttp=ObjCreate("MSXML2.XMLHTTP") ?
个人看法,照7L说的去试试,看你语句,就只有连接会相对耗时,其他的都不会有很大的时间延迟。
 楼主| 发表于 2015-11-20 09:26:01 | 显示全部楼层
回复 7# wql8549


    如果放到外面,第10行的$xmlhttp.send($PostData)语句会出错,你的没问题吗?
 楼主| 发表于 2015-11-20 09:28:22 | 显示全部楼层
回复 8# user030


    上面只贴出了关键语句,创建对象在前面,没贴上来。。
把连接语句放到循环外面,第10行的send语句会出错,不知道什么原因,你知道吗?是因为连接断开了吗?如果是的话,如何保持连接状态呢?需要自己写cookie还是?
发表于 2015-11-20 20:44:43 | 显示全部楼层
使用ObjCreate("winhttp.winhttprequest.5.1")试试
还有$xmlhttp.open("POST", $PostPage, True) ture的时候是同步,false才是异步
cookie程序自己会处理
 楼主| 发表于 2015-11-23 11:56:49 | 显示全部楼层
回复 11# gto250


你弄错了吧,那个标志位名字叫“是否异步”,所以,true=异步,false=同步。
另外winhttp.winhttprequest.5.1对象不也是基于微软那个对象,然偶自己封装的吗,winhttp的头文件里应该能查到

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2015-12-17 17:58:52 | 显示全部楼层
速度慢确实是因为网站响应慢导致的,不是程序问题。
不限制同一IP连接数,最后用多进程UDF实现了提速。结贴
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-23 21:54 , Processed in 0.092276 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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