首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

模拟POST验证码的有关问题

2014-01-17 
模拟POST验证码的问题困扰了好几天的一个问题,问度娘好好多天也没找出个好的结果我想要抓取某个查询页面PO

模拟POST验证码的问题
困扰了好几天的一个问题,问度娘好好多天也没找出个好的结果
我想要抓取某个查询页面POST后显示的结果,但始终没能解决验证码的问题

我看过原来论坛上有些个达人发过,比如这个:http://bbs.csdn.net/topics/390255236

我参考他这个做出来的依然是显示验证码错误,貌似他这个怎么获取验证码和显示页面内容是同步的~~?

我现在想做到的是:加载页面的时候显示该网站的验证码,AJAX提交后后台抓取结果页面最后返回结果到页面上

做过的谁能给个思路??不胜感激!!
[解决办法]
取验证码时要传cookie,post用同样的cookie
  
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/
[解决办法]
用HttpWebRequest的?

如果用这个的话,在获取验证的时候,把获取验证时候返回的CookieCollection保存起来,等到发送post的时候,把这个Collection传过去的


理论上这样就可以的
[解决办法]
验证码是图片吗?如果是图片,可以先将图片保存为字节,然后用一个远程打码,打码不贵(1分钱一个),一般情况下,获取验证码图片的同时,服务器会返回一个cookie,将这个cookie保存下来,然后在提交的时候,提交这个cookie和打码的结果。例如:



Uri uri = new Uri(url);
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
                    request.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)";
                    request.Accept = "*/*";
                    request.Method = "get";
                    if (!string.IsNullOrEmpty(refer))
                        request.Referer = refer;
                    request.CookieContainer = new CookieContainer();
                    if (!string.IsNullOrEmpty(ip) && !string.IsNullOrEmpty(port))
                        request.Proxy = new WebProxy(ip, TypeParse.ObjToInt(port, 80));
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    foreach (Cookie c in response.Cookies)
                    {
                        TmpCookies.Add(c);
                    }
                    Stream ms = response.GetResponseStream();
                    byte[] buffer = new byte[response.ContentLength];
                    ms.Read(buffer, 0, (int)response.ContentLength);
                    ms.Close();
                    response.Close();
                    request.Abort();
                    return buffer;

[解决办法]
那要看哪里的  不一定所有的网站都能这方法

像新浪微博密码就是sp 256加密
cookie是get一个成功后的链接得到
而且访问别的api.weibo.com时需要把cookie里面的也要换了
------解决方案--------------------


CookieContainer.Add 方法 
http://technet.microsoft.com/zh-cn/library/system.net.cookiecontainer.add%28v=vs.110%29.aspx

热点排行