TC官方合作论坛

 找回密码
 立即注册
查看: 2681|回复: 9

[已解决] RMB求救!清风的常规库 多线程 时间一长就出现未知错误!

[复制链接]
发表于 2014-9-21 04:39:05 | 显示全部楼层 |阅读模式

马上加入TC

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

x
本帖最后由 awlbm 于 2014-9-21 04:54 编辑

在第14行和347行!
  1. namespace winhttp
  2. //通过post向网站提交数据
  3. //参数1:提交的模式
  4. //参数2:要提交的网页地址
  5. //参数3:要提交的数据
  6. //参数4:返回的网页数据的编码
  7. function openUrl(type,weburl,send="",Cset="utf-8")
  8.     //http=com("MSXML2.ServerXMLHTTP.3.0")
  9.    
  10.     traceprint(":传到常规库的网址为" & weburl&"---" & 日期时间.当前日期())
  11.    
  12.     traceprint(":创建xmlhttp---"&日期时间.当前日期())
  13.     //http=com("microsoft.xmlhttp")                        //报错  未知错误
  14.     http=com("MSXML2.xmlhttp")                        //报错  未知错误
  15.     //traceprint(http)
  16.     traceprint(":创建xmlhttp("&类型.转字符型(http)&":"&类型.获得类型(http)&")完成---"&日期时间.当前日期())
  17.     traceprint(":创建xmlhttp("&类型.转整型(http)&":"&类型.获得类型(http)&")完成---"&日期时间.当前日期())
  18.     traceprint(":创建xmlhttp("&type.cdouble(http)&":"&类型.获得类型(http)&")完成---"&日期时间.当前日期())
  19.     traceprint(":创建xmlhttp("&类型.转浮点型(http)&":"&类型.获得类型(http)&")完成---"&日期时间.当前日期())
  20.    
  21.     如果(http==""||http==null)
  22.         
  23.         辅助.消息框("创建http失败!")
  24.         矿机监控.线程开关信号=假
  25.         //线程.关闭()
  26.         //矿机监控.监控线程
  27.     如果结束
  28.    
  29.    
  30.     if(str.strlowercase(type)=="post")
  31.         traceprint(":open---"&日期时间.当前日期())
  32.         http.Open("post", weburl, false)
  33.         traceprint(":open完成---"&日期时间.当前日期())
  34.         http.setRequestHeader("Cache-Control","no-cache")
  35.         http.setRequestHeader("Accept", "*/*")
  36.         http.setRequestHeader("UserAgent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET4.0C; .NET4.0E")
  37.         http.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
  38.     else
  39.         traceprint(":open---"&日期时间.当前日期())
  40.         http.Open("get", weburl, false)
  41.         traceprint(":open完成---"&日期时间.当前日期())
  42.         http.setRequestHeader("Accept", "*/*")
  43.         http.setRequestHeader("UserAgent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET4.0C; .NET4.0E")
  44.         http.setRequestHeader("Cache-Control","no-cache")
  45.     endif
  46.     traceprint(":send---"&日期时间.当前日期())
  47.     http.send(send)
  48.     traceprint(":send完成---"&日期时间.当前日期())
  49.     //times=0
  50.     //while(http.status != 200||times==3000)
  51.     //help.sleep(1)
  52.     //times=times+1
  53.     //endwhile
  54.    
  55.     //help.sleep(3000)
  56.    
  57.     //stime =日期时间.当前日期()        //获取当前时间
  58.     //        //        //traceprint("前时间:"&stime)
  59.     //        //traceprint("ReadyState:"&http.ReadyState)
  60.     //循环(http.ReadyState!=4||http.status!=200)
  61.     //        //        //traceprint("ReadyState:"&http.ReadyState)
  62.     //ntime =日期时间.当前日期()        //获取循环时间
  63.     //        //        //traceprint("后时间:"&ntime)
  64.     //时间差=日期时间.日期间隔("s",stime,ntime)
  65.     //如果(时间差>15)
  66.     //        //traceprint("时间差:"&时间差)
  67.     //跳出         //判断满足条件者跳出循环
  68.     //如果结束
  69.    
  70.     //循环结束
  71.     //自修改代码部分开始
  72.     stime=1
  73.     //traceprint(":ReadyState="&http.ReadyState&"|status="&http.status&"---"&日期时间.当前日期())
  74.     //----------------------
  75.     //while(http.ReadyState!=4||http.status!=200)
  76.    
  77.     //if(stime>4)
  78.     //traceprint(":打开网页超过5秒结束---"&日期时间.当前日期())
  79.     //http=null
  80.     //ret =""
  81.     //return ret
  82.     ////break         //判断满足条件者跳出循环
  83.     //endif
  84.     //stime++
  85.     //help.sleep(500)
  86.     //endwhile
  87.     //traceprint(":循环"&stime&"次结束---"&日期时间.当前日期())
  88.     //-----------------
  89.    
  90.     //======================
  91.     t=system.gettickcount()
  92.     while(http.ReadyState != 4)
  93.         help.sleep(100)
  94.         if((system.gettickcount()-t)>5000)
  95.             traceprint(":打开网页超过5秒结束---"&日期时间.当前日期())
  96.             http=null
  97.             ret =""
  98.             return ret
  99.             //return false
  100.         endif
  101.     endwhile
  102.     //=======================
  103.    
  104.     //help.sleep(1000)
  105.     //自修改代码部分结束
  106.     //网络借鉴
  107.    
  108.     //网络借鉴
  109.     traceprint(":开始BytesToBstr---"&日期时间.当前日期())
  110.     ret = winhttp.BytesToBstr(http.Resp**eBody,Cset)
  111.     traceprint(":BytesToBstr完成---"&日期时间.当前日期())
  112.     header=http.GetAllResp**eHeaders()
  113.     traceprint(":GetAllResp**eHeaders完成---"&日期时间.当前日期())
  114.     http=null
  115.     traceprint(":释放http("&http&":"&类型.获得类型(http)&")完成---"&日期时间.当前日期())
  116.     //traceprint(":释放http完成---"&日期时间.当前日期())
  117.     return ret
  118. endfunction
  119. //自动识别编码
  120. function openUrlExAutoCset(type,weburl,send="",setcookie="",&header="",Cset="utf-8")
  121.     http=com("WinHttp.WinHttpRequest.5.1")
  122.     //http=com("MSXML2.ServerXMLHTTP.6.0")
  123.     if(str.strlowercase(type)=="post")
  124.         http.Open("post", weburl, false)
  125.         //http.setRequestHeader("Cache-Control","no-cache")
  126.         http.setRequestHeader("If-Modified-Since","0")
  127.         http.setRequestHeader("Accept", "*/*")
  128.         http.setRequestHeader("Connection","Keep-Alive")
  129.         http.setRequestHeader("Accept-Language","zh-CN")
  130.         http.setRequestHeader("Content-Length",str.strleng(send))
  131.         http.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
  132.         http.setRequestHeader("UserAgent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET4.0C; .NET4.0E")
  133.         if(setcookie!="")
  134.             http.setRequestHeader("Cookie",setcookie)
  135.         endif
  136.         http.setRequestHeader("Referer",weburl)
  137.         
  138.     else
  139.         http.Open("get", weburl, false)
  140.         http.setRequestHeader("If-Modified-Since","0")        //
  141.         http.setRequestHeader("Accept", "*/*")
  142.         http.setRequestHeader("Connection","Keep-Alive")
  143.         http.setRequestHeader("Accept-Language","zh-CN")
  144.         http.setRequestHeader("UserAgent","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET4.0C; .NET4.0E")
  145.         if(setcookie!="")
  146.             http.setRequestHeader("Cookie",setcookie)
  147.         endif
  148.         http.setRequestHeader("Referer",weburl)
  149.     endif
  150.     http.send(send)
  151.     http.WaitForResp**e(5000)
  152.     status=http.status
  153.     header=http.GetAllResp**eHeaders()
  154.     retcset=http.getResp**eHeader("Content-Type")
  155.     cset=StrEx.mid(retcset,"charset=")
  156.     if(cset=="")
  157.         cset=Cset
  158.     endif
  159.     ret = winhttp.BytesToBstr(http.Resp**eBody,cset)
  160.     http=null
  161.     return ret
  162. endfunction

  163. function openUrlEx(type,weburl,send="",setcookie="",&header="",Cset="utf-8")
  164.     http=com("WinHttp.WinHttpRequest.5.1")
  165.     if(str.strlowercase(type)=="post")
  166.         http.Open("post", weburl, false)
  167.         http.setRequestHeader("Cache-Control","no-cache")
  168.         http.setRequestHeader("Accept", "*/*")
  169.         http.setRequestHeader("UserAgent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET4.0C; .NET4.0E")
  170.         http.setRequestHeader("Connection","Keep-Alive")
  171.         http.setRequestHeader("Accept-Encoding","*")
  172.         http.setRequestHeader("Accept-Language","zh-CN")
  173.         http.setRequestHeader("Content-Length",str.strleng(send))
  174.         http.setRequestHeader("Cookie",setcookie)
  175.         http.setRequestHeader("Referer",weburl)
  176.         http.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
  177.     else
  178.         http.Open("get", weburl, false)
  179.         http.setRequestHeader("Cache-Control","no-cache")
  180.         http.setRequestHeader("Accept", "*/*")
  181.         http.setRequestHeader("UserAgent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET4.0C; .NET4.0E")
  182.         http.setRequestHeader("Connection","Keep-Alive")
  183.         http.setRequestHeader("Accept-Encoding","*")
  184.         http.setRequestHeader("Accept-Language","zh-CN")
  185.         http.setRequestHeader("Cookie",setcookie)
  186.         http.setRequestHeader("Referer",weburl)
  187.     endif
  188.     http.send(send)
  189.     http.WaitForResp**e(5000)
  190.     //if(http.status == 200)
  191.     //header=http.GetAllResp**eHeaders
  192.     //ret = winhttp.BytesToBstr(http.Resp**eBody,Cset)
  193.     //http=null
  194.     //return ret
  195.     //endif
  196.     //if(http.status == 302)
  197.     //header=http.GetAllResp**eHeaders
  198.     //ret = winhttp.BytesToBstr(http.Resp**eBody,Cset)
  199.     //http=null
  200.     //return ret
  201.     //endif
  202.     status=http.status
  203.     header=http.GetAllResp**eHeaders()
  204.     //retcset=http.getResp**eHeader("Content-Type")
  205.     //cset=StrEx.mid(str.strlowercase(retcset),"charset=")
  206.     //if(cset)
  207.     //cset=StrEx.mid(str.strlowercase(http.Resp**etext),"charset=")
  208.     //endif
  209.     ret = winhttp.BytesToBstr(http.Resp**eBody,Cset)
  210.     http=null
  211.     return ret
  212. endfunction
  213. //不包含域信息
  214. function getCookie(header)
  215.     theader
  216.     cookie
  217.     str.split(header,"\r\n",theader)
  218.     count
  219.     arraysp.size(theader,count)
  220.     for(i=0;i<count;i++)
  221.         regextext = "Set-Cookie: (.+?)=([^;]+)?"
  222.         retArray
  223.         xx = str.strsub(theader[i],0,11)
  224.         if(xx=="Set-Cookie:")
  225.             num = 字符串.正则子表达式匹配(regextext,theader[i],retArray)   
  226.             cookie&=retArray[0]&"="&retArray[1]&";"
  227.         endif
  228.     endfor
  229.     //cookie=str.replace(cookie,";;",";")
  230.     return cookie
  231. endfunction
  232. //包含域信息
  233. function getCookieEx(header)
  234.     theader
  235.     cookie
  236.     str.split(header,"\r\n",theader)
  237.     count
  238.     arraysp.size(theader,count)
  239.     for(i=0;i<count;i++)
  240.         xx = str.strsub(theader[i],0,11)
  241.         if(xx=="Set-Cookie:")
  242.             cookie&=str.strsub(theader[i],11,str.strleng(theader[i]))&";"
  243.         endif
  244.     endfor
  245.     cookie=str.replace(cookie,";;",";")
  246.     return cookie
  247. endfunction
  248. //
  249. function setIECookie(weburl,cookie)
  250.     //BOOL InternetSetCookieEx(   LPCTSTR lpszUrl,  LPCTSTR lpszCookieName,  LPCTSTR lpszCookieData,  DWORD dwFlags,  DWORD_PTR dwReserved);
  251.     //ret=dllcall("wininet.dll","bool","InternetSetCookieExA","char*",weburl,"char *","qq","char *","0350910378","int",系统常量.INTERNET_COOKIE_THIRD_**,"int",0)
  252.     tt
  253.     str.split(cookie,";",tt)
  254.     count
  255.     arraysp.size(tt,count)
  256.     for(i=0;i<(count-1);i++)
  257.         tt1
  258.         str.split(str.strtrim(tt[i]),"=",tt1)
  259.         if(tt1[0]!="HttpOnly")
  260.             ret=dllcall("wininet.dll","BOOL","InternetSetCookieA","char *",weburl,"char *",tt1[0],"char *",tt1[1])
  261.         else
  262.             ret=dllcall("wininet.dll","BOOL","InternetSetCookieA","char *",weburl,"char *",tt1[0],"char *","")
  263.         endif
  264.         调试输出(i)
  265.     endfor
  266.    
  267. endfunction
  268. //获取网页打开的时间
  269. //参数1:网页地址
  270. //参数2:超时时间
  271. function getHtmlGetticktime(weburl,time)
  272.     http=com("Msxml2.XMLHTTP")
  273.     t=system.gettickcount()
  274.     http.Open("get", weburl, false)
  275.     http.setRequestHeader("Cache-Control","no-cache")
  276.     http.send("")
  277.     if(http.status == 200)
  278.         http=null
  279.         return system.gettickcount() - t
  280.     endif
  281.     while(http.status != 200)
  282.         if((system.gettickcount() - t)>time)
  283.             http=null
  284.             return system.gettickcount() - t
  285.         endif
  286.     endwhile
  287.    
  288. endfunction
  289. //获取北京时间
  290. function getNetTime()
  291.     http=com("MSXML2.ServerXMLHTTP.3.0")
  292.     http.Open("get","http:        //open.baidu.com/special/time/", false)
  293.     http.setRequestHeader("Cache-Control","no-cache")
  294.     http.send("")
  295.     ret=http.getResp**eHeader("Date")
  296.     ret=str.strsub(ret,str.findstr(ret,",")+2,str.strleng(ret))
  297.    
  298.     day=str.strsub(ret,0,str.findstr(ret," "))
  299.     ret=str.strsub(ret,str.findstr(ret," ")+1,str.strleng(ret))
  300.     month=str.strsub(ret,0,str.findstr(ret," "))
  301.     ret=str.strsub(ret,str.findstr(ret," ")+1,str.strleng(ret))
  302.     year=str.strsub(ret,0,str.findstr(ret," "))
  303.     ret=str.strsub(ret,str.findstr(ret," ")+1,str.strleng(ret))
  304.     time=str.strsub(ret,0,str.findstr(ret," "))
  305.     m
  306.     select(month)
  307.         case "Jan":
  308.         m=1
  309.         case "Feb":
  310.         m=2
  311.         case "Mar":
  312.         m=3
  313.         case "Apr":
  314.         m=4
  315.         case "May":
  316.         m=5
  317.         case "Jun":
  318.         m=6
  319.         case "Jul":
  320.         m=7
  321.         case "Aug":
  322.         m=8
  323.         case "Sep":
  324.         m=9
  325.         case "Oct":
  326.         m=10
  327.         case "Nov":
  328.         m=11
  329.         case "Dec":
  330.         m=12      
  331.     endselect
  332.     http=null
  333.     return  datetime.add("h",8,year&"/"&m&"/"&day&" "&time)
  334. endfunction

  335. //把二进制流转码
  336. function BytesToBstr(body,Cset="utf-8")
  337.     // "UTF-8"
  338.     //str
  339.     //if(lenb(body)==0)
  340.     //str = ""
  341.     //否则
  342.    
  343.     traceprint(":创建对象Adodb.Stream---" & 日期时间.当前日期())
  344.    
  345.     objstream =com("Adodb.Stream")                        //报错  未知错误
  346.     traceprint(":创建对象Adodb.Stream完毕---" & 日期时间.当前日期())
  347.     objstream.Type = 1
  348.     objstream.Mode =3
  349.     objstream.Open
  350.     objstream.Write(body)
  351.     objstream.Position = 0
  352.     objstream.Type = 2
  353.     objstream.Charset = Cset
  354.     str = objstream.ReadText
  355.     objstream.Close
  356.     objstream=null
  357.     //endif
  358.     //标记1:
  359.     return str
  360. endfunction

  361. //把网络上的文件下载到本地
  362. //参数1:文件地址
  363. //参数2:文件本地存放的地址
  364. function writeFile(weburl,path)
  365.     http=com("WinHttp.WinHttpRequest.5.1")
  366.     http.Open("get", weburl, false)
  367.     http.setRequestHeader("Cache-Control","no-cache")
  368.     http.send("")
  369.     http.WaitForResp**e(5000)
  370.     body=http.Resp**eBody   
  371.     http=null
  372.     stream=com("ADODB.Stream")
  373.     stream.Type = 1
  374.     stream.Open
  375.     stream.write(body)
  376.     stream.saveToFile(path, 2)
  377.     stream.Close
  378.     stream=null
  379. endfunction
  380. //将一个文件以二进制的形式读取出来
  381. //存储在变量里面
  382. function readFile(path,&len="")
  383.     ret
  384.     stream=com("ADODB.Stream")
  385.     stream.Type=1
  386.     stream.Open
  387.     stream.LoadFromFile(path)
  388.     ret = stream.Read
  389.     len=stream.Size
  390.     stream.Close
  391.     stream=null
  392.     return ret
  393. endfunction
  394. //保存指定编码的文本
  395. function SaveTextFile(sFilePath,s,sCharset="utf-8")
  396.     oStream=com("ADODB.Stream")
  397.     //以文本模式
  398.     oStream.Type=2
  399.     oStream.Mode=3
  400.     oStream.Charset=sCharset
  401.     oStream.Open
  402.     oStream.WriteText(s)
  403.     oStream.SaveToFile(sFilePath, 2)
  404.     oStream=null
  405. endfunction


  406. //.......
复制代码
回复

使用道具 举报

发表于 2014-9-21 12:35:28 | 显示全部楼层
不是常规库。。。额 搜索httprequest库
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-21 04:45:30 | 显示全部楼层
能够帮助解决问题的朋友 直接报支付宝账号  我打款50元!!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-21 10:47:59 | 显示全部楼层
回复

使用道具 举报

发表于 2014-9-21 12:35:13 | 显示全部楼层
用我的常规库吧。。。稳定。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-22 02:55:03 | 显示全部楼层
看你百度云好多分享都加了密码  既然分享  为何加密  时间长了 是不是自己都忘了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-22 02:55:32 | 显示全部楼层
rainshine 发表于 2014-9-21 12:35
不是常规库。。。额 搜索httprequest库


看你百度云好多分享都加了密码  既然分享  为何加密  时间长了 是不是自己都忘了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-23 01:58:59 | 显示全部楼层
rainshine 发表于 2014-9-21 12:35
不是常规库。。。额 搜索httprequest库

虽然没有采用你的库  但是你这一句给了我极大的启示  现在问题应该是解决了  谢谢!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-23 02:02:46 | 显示全部楼层
现在终于弄明白 XMLHTTP已经过时了 单线程玩玩可以 应付多线程  必死!
回复 支持 反对

使用道具 举报

发表于 2020-7-7 17:47:45 | 显示全部楼层
rainshine 发表于 2014-9-21 12:35
用我的常规库吧。。。稳定。。

你的常规库哪里可以下载
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-5-16 09:25 , Processed in 0.044989 second(s), 23 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

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