苏飞论坛

标题: Post提交多次服务器返回错误现象 [打印本页]

作者: fengzhishe    时间: 2013-9-3 10:33
标题: Post提交多次服务器返回错误现象
这个现象我反复测试了几次,有个规律3次以上会返回错误,重新启动软件,前3次又能正常,网上找了下说法:需要及时HttpWebRequest做Abort处理,但是还是无效(说明下,目标网站是有很多人同时请求那种,像秒杀时刻那种)

作者: 站长苏飞    时间: 2013-9-3 12:57
看下代码才能知道
作者: fengzhishe    时间: 2013-9-3 13:08
item = new HttpItem()
                            {
                                URL = "http://58.18.212.100:8080/cgsdms/preAsign/ExamSiteAction!checkUserInfo.action",//URL    必需项               
                                Method = "Post",//URL     可选项 默认为Get
                                ContentType = "application/x-www-form-urlencoded",//返回类型
                                UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;",
                                Postdata = "person.sfzmmc=A&person.sfzmhm=" + dic["UID"].ToString() + "&lsh=" + dic["Pwd"].ToString() + "&checkNum=" + dic["Code"].ToString(),                                                           
                                Cookie = cookie,
                                Timeout = 10000,
                                ResultType = ResultType.String,
                                KeepAlive=false,
                                ProtocolVersion = HttpVersion.Version10,
                                
                                
                            };
                            item.Header.Add("Origin", " http://58.18.212.100:8080");
                            item.Header.Add("x-requested-with", "XMLHttpRequest");


作者: fengzhishe    时间: 2013-9-3 13:09
站长苏飞 发表于 2013-9-3 12:57
看下代码才能知道

item = new HttpItem()
                            {
                                URL = "http://58.18.212.100:8080/cgsdms/preAsign/ExamSiteAction!checkUserInfo.action",//URL    必需项               
                                Method = "Post",//URL     可选项 默认为Get
                                ContentType = "application/x-www-form-urlencoded",//返回类型
                                UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;",//listAgent[randomNum.Next(4)],//"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0",//用户的浏览器类型,版本,操作系统
                                Postdata = "person.sfzmmc=A&person.sfzmhm=" + dic["UID"].ToString() + "&lsh=" + dic["Pwd"].ToString() + "&checkNum=" + dic["Code"].ToString(),
                                ProxyIp = dic["ProxyIp"],                                
                                Cookie = cookie,
                                Timeout = 10000,
                                ResultType = ResultType.String,
                                KeepAlive=false,
                                ProtocolVersion = HttpVersion.Version10,


                            };
                            item.Header.Add("Origin", " http://58.18.212.100:8080");
                            item.Header.Add("x-requested-with", "XMLHttpRequest");


作者: 站长苏飞    时间: 2013-9-3 14:43
只看参数看不出来吧,关键是看你是怎么多次访问的
作者: fengzhishe    时间: 2013-9-3 14:57
站长苏飞 发表于 2013-9-3 14:43
只看参数看不出来吧,关键是看你是怎么多次访问的

就是在for循环里面,每次sleep(500),这个时间加长也是一样,到了第四次,服务器就返回错误了

作者: 站长苏飞    时间: 2013-9-3 15:00
能看下代码吗?提示下代码吧,没代码无法知道问题所在
作者: fengzhishe    时间: 2013-9-3 15:07
站长苏飞 发表于 2013-9-3 15:00
能看下代码吗?提示下代码吧,没代码无法知道问题所在

for (int i = 1; i <= 5000; i++)
                {//登录      
                    if (!flg)
                    {
                        if (i > 30)
                        {
                            Thread.Sleep(5000);
                        }
                        Thread.Sleep(500);
                        #region 登录
                        try
                        {

                            ListInfo.Add(dic["Name"].ToString() + "正在登录    " + DateTime.Now.ToString() + "   代理IP【" + dic["ProxyIp"] + "】");
                            item = new HttpItem()
                            {
                                URL = "http://58.18.212.100:8080/cgsdms/preAsign/ExamSiteAction!checkUserInfo.action",//URL    必需项               
                                Method = "Post",//URL     可选项 默认为Get
                                ContentType = "application/x-www-form-urlencoded",//返回类型
                                UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;",//listAgent[randomNum.Next(4)],//"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0",//用户的浏览器类型,版本,操作系统
                                Postdata = "person.sfzmmc=A&person.sfzmhm=" + dic["UID"].ToString() + "&lsh=" + dic["Pwd"].ToString() + "&checkNum=" + dic["Code"].ToString(),
                                ProxyIp = dic["ProxyIp"],                                
                                Cookie = cookie,
                                Timeout = 10000,
                                ResultType = ResultType.String,
                                KeepAlive=false,
                                ProtocolVersion = HttpVersion.Version10,


                            };
                            item.Header.Add("Origin", " http://58.18.212.100:8080");
                            item.Header.Add("x-requested-with", "XMLHttpRequest");

                            //得到HTML代码
                            HttpResult result = new HttpResult();
                            result = http2.GetHtml(item);
                            List<string> list = BackDistillDNs(result.Html, "#info'\\).html\\('(.*?)'\\);");

                            if (result.Html.Contains("基础连接已经关闭") || result.Html.Contains("操作超时") || result.Html.Contains("远程服务器返回错误") || result.Html.Contains("无法连接到远程服务器") || result.Html.Contains("未经授权"))
                            {
                                ListInfo.Add(dic["Name"].ToString() + result.Html + ",程序将自动重试" + i.ToString() + "次    " + DateTime.Now.ToString() + "   代理IP【" + dic["ProxyIp"] + "】");
                                if (i == 5 || i == 10 || i == 20 || i == 30 || i == 60 || i == 80 || i == 100 || i == 150)
                                {
                                    dic["ProxyIp"] = GetIP();
                                }
                                Thread.Sleep(3000);

                                flg = false;
                            }

                            if (result.Html.Contains("body onload=\"pdpxshrq();\""))
                            {
                                ListInfo.Add(dic["Name"].ToString() + "登录成功    " + DateTime.Now.ToString() + "   代理IP【" + dic["ProxyIp"] + "】");
                                return true;
                            }

                        }
                        catch (Exception ex)
                        {
                            ListInfo.Add(dic["Name"].ToString() + ex.Message + "    " + DateTime.Now.ToString() + "   代理IP【" + dic["ProxyIp"] + "】");
                            return false;
                        }
                        #endregion
                    }
                }


作者: 站长苏飞    时间: 2013-9-3 15:22
很多时候就是我们太相信自己写的代码了,感觉一个小功能没有问题,一直在找是不是别人的部分的问题。
到最后有可能是自己代码的小小失误
作者: fengzhishe    时间: 2013-9-3 15:31
站长苏飞 发表于 2013-9-3 15:22
很多时候就是我们太相信自己写的代码了,感觉一个小功能没有问题,一直在找是不是别人的部分的问题。
到最 ...

求指点

作者: fengzhishe    时间: 2013-9-3 15:35
fengzhishe 发表于 2013-9-3 15:31
求指点

ProtocolVersion = HttpVersion.Version10,
纠正下:上面发的代码里面这里多了个“,”,我拷贝多了一点,这个是去掉了的

作者: 站长苏飞    时间: 2013-9-3 16:59
看代码没什么问题,要不然你加个重试吧,或许是服务器的问题。
作者: fengzhishe    时间: 2013-9-3 17:28
站长苏飞 发表于 2013-9-3 16:59
看代码没什么问题,要不然你加个重试吧,或许是服务器的问题。

怎么重试呢?没太明白,望指教




欢迎光临 苏飞论坛 (http://www.sufeinet.com/) Powered by Discuz! X3.4