苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

查看: 10842|回复: 9

[其他] HttpHelper 多线程POST求助!

[复制链接]
发表于 2013-1-27 18:49:32 | 显示全部楼层 |阅读模式
如题,我在用HttpHelper时遇到问题,调试了很久没解决,希望高手帮忙;

现在程序用的是单线程,POst完一次取结果,判断完之后进行下一次POST,一直不停,直到点停止按钮;
如果程序只开一个访问速度很好,结果正确,如果程序开了两个或更多,数据就没有返回了,抛出异常,在此请求大家,如何才能
像一个地址同时多线程POST数据?在线等……


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-1-27 19:06:34 | 显示全部楼层
http://www.sufeinet.com/thread-13-1-1.html这里有例子,你看看吧,按你说的的意思只有网速跟不上时才有可能,一般是代码问题,建议发下代码,看看具体情况
 楼主| 发表于 2013-1-27 19:19:19 | 显示全部楼层
        private string Post2Url(string Data,string Proxy,string Url)
        {
            DotNet.Utilities.HttpItem Info=new DotNet.Utilities.HttpItem();
            DotNet.Utilities.HttpHelper POST=new DotNet.Utilities.HttpHelper();
            Info.Postdata = Data;
            if (Proxy != "")
                Info.ProxyIp = Proxy;
                Info.Method = "post";
               Info.URL = Url;
               Info.Encoding = "UTF-8";
               Info.ContentType = "application/x-www-form-urlencoded";   
                return POST.GetHtml(Info);
        }
这是获取POST后的源码函数
public void MyThread()
        {
            Console.WriteLine("线程启动");
            setProp(false);
            string data="";
            string myinfo="";
            int ret=0;
            button2.Enabled = true;
        Serverfalse: while (flag)
            {
                Thread.Sleep(200);
                data = Todata(CurrentNum, Ptr);
                Console.WriteLine(data);
             try
                {
                   myinfo = Post2Url(data, Mproxy, Mserver).Trim();
                    ret = check(myinfo);
                     Console.WriteLine(myinfo);
                    switch (ret)
                    {
                        case 1: RightNum();
                            //Console.WriteLine("right");
                            break;
                        case 2: WrongPWD();
                            //Console.WriteLine("wrong");
                            break;
                        case 3: WrongNum();
                           // Console.WriteLine("unused");
                            break;
                        default: WrongServer();
                            //Console.WriteLine("retry");
                            break;
                    }
                    Count += 1;
                    Total.Text = Count.ToString();
                }
                catch
                {
                    Unexpect++;
                    Unexpectdsp.Text = Unexpect.ToString();
                    goto Serverfalse;
                }
            }
            
        }
这是主线程循环
发表于 2013-1-27 19:53:27 | 显示全部楼层
没看见有子线程啊,你看看我的例子吧
 楼主| 发表于 2013-1-27 20:05:05 | 显示全部楼层
public void MyThread()这就是启动的子线程 ,你的那个例子我看了,会不会只能get多线程,POST服务器那边就不行?
发表于 2013-1-27 20:14:26 | 显示全部楼层
和这个没关系,还是代码的事,建议你去点处理异常的地方调试一下看看是哪的问题
 楼主| 发表于 2013-1-27 20:59:27 | 显示全部楼层
我还用例子中的httphelps类就能多开了,奇怪的很啊!
         顺便问下  System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;和定义delegate函数在线程访问窗体控件是有什么区别,我的刚刚界面卡死了!!
发表于 2013-1-28 10:06:25 | 显示全部楼层
你直接在子线程访问控件是肯定不行的啊,或者是说在一些情况下是不行的,
但是使用delegate就肯定没有问题,
如果要访问在子线程外定义的对象或者是控件,之类的,或者是主线程里的东东,是不能直接访问的,那样会出错,应该使用delegate
发表于 2013-8-26 20:26:44 | 显示全部楼层
支持一下吧!
发表于 2013-8-31 16:09:14 | 显示全部楼层
顶 支持一下
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

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

GMT+8, 2024-12-27 20:43

© 2014-2021

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