http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 13210|回复: 12

[HTTP] Post提交多次服务器返回错误现象

[复制链接]
发表于 2013-9-3 10:33:27 | 显示全部楼层 |阅读模式
这个现象我反复测试了几次,有个规律3次以上会返回错误,重新启动软件,前3次又能正常,网上找了下说法:需要及时HttpWebRequest做Abort处理,但是还是无效(说明下,目标网站是有很多人同时请求那种,像秒杀时刻那种)


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-9-3 12:57:16 | 显示全部楼层
看下代码才能知道
 楼主| 发表于 2013-9-3 13:08:26 | 显示全部楼层
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");

 楼主| 发表于 2013-9-3 13:09:36 | 显示全部楼层
站长苏飞 发表于 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:52 | 显示全部楼层
只看参数看不出来吧,关键是看你是怎么多次访问的
 楼主| 发表于 2013-9-3 14:57:16 | 显示全部楼层
站长苏飞 发表于 2013-9-3 14:43
只看参数看不出来吧,关键是看你是怎么多次访问的

就是在for循环里面,每次sleep(500),这个时间加长也是一样,到了第四次,服务器就返回错误了
发表于 2013-9-3 15:00:14 | 显示全部楼层
能看下代码吗?提示下代码吧,没代码无法知道问题所在
 楼主| 发表于 2013-9-3 15:07:08 | 显示全部楼层
站长苏飞 发表于 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:23 | 显示全部楼层
很多时候就是我们太相信自己写的代码了,感觉一个小功能没有问题,一直在找是不是别人的部分的问题。
到最后有可能是自己代码的小小失误
 楼主| 发表于 2013-9-3 15:31:59 | 显示全部楼层
站长苏飞 发表于 2013-9-3 15:22
很多时候就是我们太相信自己写的代码了,感觉一个小功能没有问题,一直在找是不是别人的部分的问题。
到最 ...

求指点
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-5-3 15:20

© 2014-2021

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