用c#做一个登录窗口,发送账号密码到制定网站进行登录并获取验证码

yuanhaoan 2008-12-19 05:32:27
参考网站http://diguo.nationfield.com/


这是一个网页游戏网站,我想用c#做个小程序,以后进游戏就不打开浏览器了,没想到第一步就卡主,我不知道该把账号密码发到哪里(没找到地址)同时还要获取验证码并发送。

知道哪里有现成的代码示例也可以,把地址发来就ok,先说声谢谢

...全文
831 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
bestdowt1314 2008-12-29
  • 打赏
  • 举报
回复
直接把你那个登陆的网页放在你C#里的程序里不就行了。这样不是很方便
derelictangel 2008-12-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 goga21cn 的回复:]
看看CSDN Reader吧!
[/Quote]

PS:
我的目标是 ---->

^_^
dieindark 2008-12-28
  • 打赏
  • 举报
回复
登陆某论坛的主要功能代码

string request = "GET /bbs/logging.php?action=login HTTP/1.1\r\n";
request += "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*\r\n";
request += "Referer: http://www.tb-sky.net/bbs/scalper.php\r\n";
request += "Accept-Language: zh-cn\r\n";
request += "Host: " + server + "\r\n";
request += "Connection: Keep-Alive\r\n\r\n";
string page = SocketSendReceive(request);
return page;

编写HTTP协议报文头内容



SocketSendReceive(request)方法通过socket发送HTTP协议页面请求 获取HTTP服务器返回的数据


public static string SocketSendReceive(string request)
{

Byte[] bytesSent = Encoding.ASCII.GetBytes(request);
Byte[] bytesReceived = new Byte[1024];

// Create a socket connection with the specified server and port.
Socket s = ConnectSocket();

if (s == null)
return ("Connection failed");

// Send request to the server.
s.Send(bytesSent, bytesSent.Length, 0);

// Receive the server home page content.
int bytes = 0;
string page = "Default HTML page on " + server + ":\r\n";

// The following will block until te page is transmitted.
do
{
bytes = s.Receive(bytesReceived, bytesReceived.Length, 0);
Encoding gb2312 = Encoding.GetEncoding("gb2312");//将读取的字节数转换为字符串

page = page + gb2312.GetString(bytesReceived, 0, bytes);


}
while (bytes > 0);
s.Close();
return page;
}


上面使用的是 GET页面请求 为了从服务器返回的数据中获取cookie的值 存入变量

下面是利用POST 发送帐号密码

public static string SocketSendLogin(string strFormHash, string username, string password)
{


username = HttpUtility.UrlEncode(username, Encoding.GetEncoding("GB2312"));

string request = "POST /bbs/logging.php?action=login HTTP/1.1\r\n";
request += "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*\r\n";
request += "Referer: http://www.tb-sky.net/bbs/logging.php?action=login\r\n";
request += "Accept-Language: zh-cn\r\n";
request += "Content-Type: application/x-www-form-urlencoded\r\n";
request += "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n";
request += "Host: " + server + "\r\n";
request += "Content-Length: 173\r\n";
request += "Connection: Keep-Alive\r\n";
request += "Cache-Control: no-cache\r\n";
request += "Cookie: 8Lv_sid=" + clsCookiesVO.GetLv_Sid() + "\r\n\r\n";

string PostData = "formhash=" + strFormHash + "&referer=index.php&loginfield=username&username="+username+"&password="+password+"&questionid=0&answer=&cookietime=2592000&loginmode=&styleid=&loginsubmit=%CC%E1%BD%BB";

request += PostData;

string page = SocketSendReceive(request);
return page;
}

同样调用SocketSendReceive()方法 把报文头内容传参过去

返回的数据中应存在HTML页面原代码 通过分析代码内容 得知是否登陆成功

其中 SocketSendReceive 方法中的 创建socket方法需要自行编写下

很简单的 找个例子照做就ok


验证码的部分 还未完成

也只能是显示验证码然后手动输入 把输入的变量加在POST请求内一并发送就可以了

dieindark 2008-12-28
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 woodboy23 的回复:]
csdn的验证码基本没用在cookie 里有????
[/Quote]

我没有研究csdn的验证码

不过想来 不可能存在于cookie 起码我还没有见过把验证码的值存放于cookie或者session 之类的网站

制造验证码的目的就是为了防止机器人

如果存放于固定位置 还有什么必要 为了好看么..

除非csdn的验证码就是摆设

woodboy23 2008-12-28
  • 打赏
  • 举报
回复
csdn的验证码基本没用在cookie 里有????
woodboy23 2008-12-28
  • 打赏
  • 举报
回复
csdn的验证码基本没用在cookie 里有
dieindark 2008-12-27
  • 打赏
  • 举报
回复
我也再做这方面的
不过全部是通过socket来操作

郁闷的是我的socket只能对iis发送一次请求
第二次就不行了

也不抱错

也没有接受到数据

我研究好了发上拉哈

dieindark 2008-12-27
  • 打赏
  • 举报
回复
http://diguo.nationfield.com/Img_code.asp

用socket读入图片 然后用控件显示出来就行了

protected void Page_Load(object sender, EventArgs e)
{
string checkCode = CreateCode(4);
Session["CheckCode"] = checkCode;
CreateImage(checkCode);
}
woodboy23 2008-12-27
  • 打赏
  • 举报
回复
看了你那个页面.应该不太难实现,而且他的验证码都很简单.要识别也可以
子夜1978 2008-12-27
  • 打赏
  • 举报
回复
验证码的机制一般不好搞的,还是放弃吧!!
dieindark 2008-12-27
  • 打赏
  • 举报
回复
验证码的破解 需要很强的图片解析编程基础的巴
反正不是那么容易
况且现在验证码越来越BT 连人都快看不清了 别说程序了

我记得有个验证码解析库 忘了叫什么了 1年的费用 2999 专业版的要1万多.....

思路就是保存图片 然后切割 去黑点什么的

找到了 就是这家 商业的

http://www.enjoy-soft.cn/article/sanwen/45.html

不是广告哦 想研究的话 搂住可以看看

反正我估计我还得个几年才能搞的出来



用c# 登陆CSDN的源代码


http://blog.csdn.net/dieindark/archive/2008/12/26/3618000.aspx

在这里

我也是昨天找到的 因为也在做这方面的

呵呵 搂住可以研究下

这个代码是别人写的 用的也不是webBrowse

是httpWebRequest

dieindark 2008-12-27
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 yuanhaoan 的回复:]
引用 27 楼 zpcoder 的回复:

直接做一个 winform 窗体。用webBrowse 控件就可以达到目的。没必要一定传密码和帐号去吧。

况且这样也不安全呀

参考地址:http://zhidao.baidu.com/question/72971559.html


很感谢这位高手,推荐的方法比我原先用的方便很多,但是没提到验证码额........

验证码的思路,25楼的兄弟和想的差不多,虽然能获得图片,但却不是当前的图片,好像是进行了刷新似的,得到的是一张新的图片
[/Quote]

如果你用webBrowse这种控件来做的 肯定取得的不是当前的图片

一般验证码的地址 假如是 http://www.xxx.com/getImg?

你用webbrowse读取的时候 已经刷新了这个地址 同时在服务端那边 已经存入了验证码相关信息

你再用图片显示功能去刷新这个地址的时候 已经不是wenbrowse那个了

所以推荐用socket来获取

就能同时获取到html代码和这个图片了

不过c#应该有同步网页图片的控件代码之类的八

我也不太清楚了 我刚转c#
dieindark 2008-12-27
  • 打赏
  • 举报
回复


用socket读入图片

然后用图片分割 分析图片获取验证码

验证码根本不可能存在与cookie session url之间的......

如果真的是那样 就皆大欢喜了
anncesky 2008-12-27
  • 打赏
  • 举报
回复
这就是模拟登陆,用webclient or httprequest都可以 网上查很多
不过验证码识别的话,需要一些技术,csdn的验证码基本没用在cookie 里有

不过像腾讯的验证码,网上的朋友基本还没有人能识别,看你运气了
yuanhaoan 2008-12-27
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 zpcoder 的回复:]

直接做一个 winform 窗体。用webBrowse 控件就可以达到目的。没必要一定传密码和帐号去吧。

况且这样也不安全呀

参考地址:http://zhidao.baidu.com/question/72971559.html
[/Quote]

很感谢这位高手,推荐的方法比我原先用的方便很多,但是没提到验证码额........

验证码的思路,25楼的兄弟和想的差不多,虽然能获得图片,但却不是当前的图片,好像是进行了刷新似的,得到的是一张新的图片
zpcoder 2008-12-27
  • 打赏
  • 举报
回复

用 .net Remoting 会不会成功呢??
zpcoder 2008-12-27
  • 打赏
  • 举报
回复

直接做一个 winform 窗体。用webBrowse 控件就可以达到目的。没必要一定传密码和帐号去吧。

况且这样也不安全呀

参考地址:http://zhidao.baidu.com/question/72971559.html
woodboy23 2008-12-27
  • 打赏
  • 举报
回复
保持COOKIES
然后取验证码的URL
yuanhaoan 2008-12-26
  • 打赏
  • 举报
回复
看来这东西太难了,我去别的论坛逛逛
yuanhaoan 2008-12-24
  • 打赏
  • 举报
回复
过去好几天啦,验证码问题还是没解决,继续求

再次说明,不是做自动登录机,验证码无须自动输入,只要能让我获得验证码的图片就ok
加载更多回复(19)

111,131

社区成员

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

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

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