c#模拟浏览器注册新浪邮箱账号

万载馨辰 2013-08-03 11:50:01
目前已经做到注册提交账号了,出现了问题,代码如下

string result = null;
txtLog.WriteLog("开始注册");
string email = "ipx5gjynbnwc5q@163.com";// getEmail();
string password = Util.CreateRandomCode(6);
if (string.IsNullOrEmpty(email))
{
txtLog.WriteLog("缺少邮箱账号");
}
else
{
WebClient.Encoding = Encoding.GetEncoding(936);
WebClient.Referer = "http://login.sina.com.cn/signup/";
WebClient.Host = "login.sina.com.cn";
result = WebClient.DownloadString("http://login.sina.com.cn/signup/signupmail.php");
WebClient.DownloadData("https://login.sina.com.cn/images/signup/showcolor.png");
MatchCollection matches = Regex.Matches(result, @"([\d\w]{32}|referer|entry|src|type|regtime)"":""(.*?)""", RegexOptions.IgnoreCase);
txtLog.WriteLog("识别验证码");
WebClient.Referer = "https://login.sina.com.cn/signup/signup";
WebClient.Headers["host"] = "login.sina.com.cn";
//下面是识别验证码
string door = Util.RecogniteValidateImage(WebClient.OpenRead("https://login.sina.com.cn/cgi/pin.php?r=" + Util.GetTimeStamp() + "&lang=zh&type=hollow"), picValidate, getValidateCode);
IDictionary<string, string> data = new Dictionary<string, string>();
while (true)
{
if (checkUserName(email)) break;//判断邮箱是否可用
email = getEmail();
if (string.IsNullOrEmpty(email))
{
txtLog.WriteLog("缺少邮箱账号");
break;
}
}
if (!string.IsNullOrEmpty(email))
{
data.Clear();
data.Add("othermail", email);
data.Add("password", password);
data.Add("door", door);
data.Add("arg", "");
data.Add("hobbies[]", "23");
data.Add("mailType", "sina.cn");
data.Add("regtype", "othermail");
data.Add("username", "");
foreach (Match salt in matches)
{
data.Add(salt.Groups[1].Value, salt.Groups[2].Value);
}
if (!data.ContainsKey("r"))
data.Add("r", "");
WebClient.XMLHttpRequest();
WebClient.Referer = "https://login.sina.com.cn/signup/signup";
WebClient.Host = "login.sina.com.cn";
result = WebClient.UploadData("https://login.sina.com.cn/signup/signupflow", data);
i++;
}
}

result = WebClient.UploadData("https://login.sina.com.cn/signup/signupflow", data);
这一句,如果输入一个错误的验证码,那么这句会返回“验证码错误”,奇怪的是输入正确的验证码,这句返回“请重新验证验证码”,这是怎么回事?
...全文
1798 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
songz2000 2015-11-21
  • 打赏
  • 举报
回复
我也想请教同样的问题呢,不知道楼主解决了没有
qq4004229 2014-12-01
  • 打赏
  • 举报
回复
我这里报:{"retcode":-8023,"msg":["","","","","请先完成验证"]}
qq4004229 2014-11-10
  • 打赏
  • 举报
回复
result = WebClient.UploadData("https://login.sina.com.cn/signup/signupflow", data); 我这里,data要求是byte[]数组啊
qq4004229 2014-11-10
  • 打赏
  • 举报
回复
留下QQ,我这里用不了
万载馨辰 2013-08-04
  • 打赏
  • 举报
回复
引用 11 楼 zhuankeshumo 的回复:
估计是防止别人恶意申请的 牺牲用户体验
我清空了cookies,发现又正常了,这网站真有问题
万载馨辰 2013-08-04
  • 打赏
  • 举报
回复
引用 11 楼 zhuankeshumo 的回复:
估计是防止别人恶意申请的 牺牲用户体验
还真是```刚刚试了,不过也只是第一次而已,第二次就不会这样了,这样的话```有办法了```
newtee 2013-08-04
  • 打赏
  • 举报
回复
这种验证码识别明天试试
newtee 2013-08-04
  • 打赏
  • 举报
回复
估计是防止别人恶意申请的 牺牲用户体验
newtee 2013-08-04
  • 打赏
  • 举报
回复
看吧
万载馨辰 2013-08-04
  • 打赏
  • 举报
回复
引用 8 楼 zhuankeshumo 的回复:
输入正确的验证码,这句返回“请重新验证验证码”,这是怎么回事 你手动申请也会出现这个问题 刚刚在你之前那个帖子时候我试了
真会出?我今天试了一天了没出呀````再去试试```
newtee 2013-08-04
  • 打赏
  • 举报
回复
输入正确的验证码,这句返回“请重新验证验证码”,这是怎么回事 你手动申请也会出现这个问题 刚刚在你之前那个帖子时候我试了
万载馨辰 2013-08-04
  • 打赏
  • 举报
回复
引用 6 楼 zhuankeshumo 的回复:
[quote=引用 5 楼 z1101385391 的回复:] [quote=引用 3 楼 zhuankeshumo 的回复:] 实在不行就用webbrowser呗
webbrowser判断文档加载完成好麻烦```` DocumentCompleted事件只是其中一部分加载完成了,不是全部 而且这个控件也比较慢[/quote]你去申请个帐号试试就知道了 第一遍表单填写正确提交 它就会离奇的跳出重新输入验证码的提示[/quote] 我今天一直在试呀```没这问题呀,只是偶尔出这问题 后来我用IE把


                        foreach (Match salt in matches)
                        {
                            data.Add(salt.Groups[1].Value, salt.Groups[2].Value);
                        }
这段代码实现的数据给清空了,看起来应该是盐值,浏览器就果断报“请重新验证验证码”的错了
newtee 2013-08-04
  • 打赏
  • 举报
回复
引用 5 楼 z1101385391 的回复:
[quote=引用 3 楼 zhuankeshumo 的回复:] 实在不行就用webbrowser呗
webbrowser判断文档加载完成好麻烦```` DocumentCompleted事件只是其中一部分加载完成了,不是全部 而且这个控件也比较慢[/quote]你去申请个帐号试试就知道了 第一遍表单填写正确提交 它就会离奇的跳出重新输入验证码的提示
万载馨辰 2013-08-04
  • 打赏
  • 举报
回复
引用 15 楼 zhuankeshumo 的回复:
[quote=引用 4 楼 z1101385391 的回复:] 呃``楼上两位,那个验证码识别是弹出来识别和由平台识别的```` 官方没问题的,官方有问题的话我就不做了
哪个平台?[/quote] 打码兔
newtee 2013-08-04
  • 打赏
  • 举报
回复
引用 4 楼 z1101385391 的回复:
呃``楼上两位,那个验证码识别是弹出来识别和由平台识别的```` 官方没问题的,官方有问题的话我就不做了
哪个平台?
万载馨辰 2013-08-03
  • 打赏
  • 举报
回复
引用 3 楼 zhuankeshumo 的回复:
实在不行就用webbrowser呗
webbrowser判断文档加载完成好麻烦```` DocumentCompleted事件只是其中一部分加载完成了,不是全部 而且这个控件也比较慢
万载馨辰 2013-08-03
  • 打赏
  • 举报
回复
呃``楼上两位,那个验证码识别是弹出来识别和由平台识别的```` 官方没问题的,官方有问题的话我就不做了
newtee 2013-08-03
  • 打赏
  • 举报
回复
实在不行就用webbrowser呗
newtee 2013-08-03
  • 打赏
  • 举报
回复
楼主的验证码识别可以给我学习一下吗?
newtee 2013-08-03
  • 打赏
  • 举报
回复
引用 楼主 z1101385391 的回复:
目前已经做到注册提交账号了,出现了问题,代码如下

string result = null;
                txtLog.WriteLog("开始注册");
                string email = "ipx5gjynbnwc5q@163.com";// getEmail();
                string password = Util.CreateRandomCode(6);
                if (string.IsNullOrEmpty(email))
                {
                    txtLog.WriteLog("缺少邮箱账号");
                }
                else
                {
                    WebClient.Encoding = Encoding.GetEncoding(936);
                    WebClient.Referer = "http://login.sina.com.cn/signup/";
                    WebClient.Host = "login.sina.com.cn";
                    result = WebClient.DownloadString("http://login.sina.com.cn/signup/signupmail.php");
                    WebClient.DownloadData("https://login.sina.com.cn/images/signup/showcolor.png");
                    MatchCollection matches = Regex.Matches(result, @"([\d\w]{32}|referer|entry|src|type|regtime)"":""(.*?)""", RegexOptions.IgnoreCase);
                    txtLog.WriteLog("识别验证码");
                    WebClient.Referer = "https://login.sina.com.cn/signup/signup";
                    WebClient.Headers["host"] = "login.sina.com.cn";
                      //下面是识别验证码
                    string door =   Util.RecogniteValidateImage(WebClient.OpenRead("https://login.sina.com.cn/cgi/pin.php?r=" + Util.GetTimeStamp() + "&lang=zh&type=hollow"), picValidate, getValidateCode);
                    IDictionary<string, string> data = new Dictionary<string, string>();
                    while (true)
                    {
                        if (checkUserName(email)) break;//判断邮箱是否可用
                        email = getEmail();
                        if (string.IsNullOrEmpty(email))
                        {
                            txtLog.WriteLog("缺少邮箱账号");
                            break;
                        }
                    }
                    if (!string.IsNullOrEmpty(email))
                    {
                        data.Clear();
                        data.Add("othermail", email);
                        data.Add("password", password);
                        data.Add("door", door);
                        data.Add("arg", "");
                        data.Add("hobbies[]", "23");
                        data.Add("mailType", "sina.cn");
                        data.Add("regtype", "othermail");
                        data.Add("username", "");
                        foreach (Match salt in matches)
                        {
                            data.Add(salt.Groups[1].Value, salt.Groups[2].Value);
                        }
                        if (!data.ContainsKey("r"))
                            data.Add("r", "");
                        WebClient.XMLHttpRequest();
                        WebClient.Referer = "https://login.sina.com.cn/signup/signup";
                        WebClient.Host = "login.sina.com.cn";
                        result = WebClient.UploadData("https://login.sina.com.cn/signup/signupflow", data);
                        i++;
                    }
                }
result = WebClient.UploadData("https://login.sina.com.cn/signup/signupflow", data); 这一句,如果输入一个错误的验证码,那么这句会返回“验证码错误”,奇怪的是输入正确的验证码,这句返回“请重新验证验证码”,这是怎么回事?
上个帖子想回复的无赖验证码识别我还做不出来 其实你去申请个帐号就知道了 是新浪注册的问题 你输入正确信息后还要重新输入验证码

110,580

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧