首页 新闻 会员 周边 捐助

关于winform登录到网站头痛的问题(实现网站登录器的客户端软件)

0
悬赏园豆:120 [已关闭问题]

直接贴图

请高手们帮我解决一下,十分感谢~~

问题补充: 我网上查到了这个问题:具体操作:可在网站上建一个专用页面,功能为验证用户信息合法后,发放验证票据,然后在winform中登录成功后,模拟访问一下这个页面即可(注:经实践,不能用webRequest或webClient来实现,webRequest或webClient虽然可以达到用程序访问该页的效果,但并不能正确设置浏览器的cookie,正确的解决办法是在winform中放置一个webBrowser,让webBrowser来访问该页,这样就跟用户真正用浏览器浏览网页得到的效果才是一样的) 但不知道怎么解决;
阿松的主页 阿松 | 小虾三级 | 园豆:601
提问于:2009-11-06 17:05
< >
分享
其他回答(4)
0

在this.close()前面再提交一次服务请求呢?(就是把前面验证的过程再执行一次)

dege301 | 园豆:2825 (老鸟四级) | 2009-11-06 17:18
为什么要这样做呢? 我试了没用。。。
支持(0) 反对(0) 阿松 | 园豆:601 (小虾三级) | 2009-11-06 17:22
登录成功产生票据的判断依据是什么?
支持(0) 反对(0) dege301 | 园豆:2825 (老鸟四级) | 2009-11-06 17:31
@dege301: 依据text2返回出来登录成功的标志。网站的登录入口用post来取得用户名和密码,如果我用get方式真接在址址栏里打入参数的话。就可以保持登录状态,说明票据是产生的。
支持(0) 反对(0) 阿松 | 园豆:601 (小虾三级) | 2009-11-06 17:42
0

我认为原因是.Net的库中的WebRequest和你开启的IE进程之间,session不能共享。

heww | 园豆:210 (菜鸟二级) | 2009-11-06 17:34
用webBrowser访问页面,但是不把它显示出来不就达到你要的效果了?
支持(0) 反对(0) heww | 园豆:210 (菜鸟二级) | 2009-11-06 17:41
0

 

如下调用:
至于设置的cookie就是你上面webrequest登陆成功之后会得到 “set-cookies”的head。从webresponse
对象取出。在按照下面调用浏览器,将登陆后的cookie环境写入。希望对你有些帮助:)

Code
using System.Runtime.InteropServices;



读取函数

[DllImport(
"wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);


写入函数
[DllImport(
"wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool InternetGetCookie(string lpszUrlName, string lbszCookieName, StringBuilder lpszCookieData, ref int lpdwSize);

检测错误函数
[DllImport(
"kernel32.dll")]

public static extern Int32 GetLastError();



使用部分代码


设置cookie

if (!InternetSetCookie("http://xxxx/xxxx.htm", "Test", "Sent as Test via VB+ ;expires=Sun,22-Feb-2099 00:00:00 GMT"))
{

MessageBox.Show(GetLastError().ToString());
}

读取cookie



int size = 1000;
StringBuilder cookie
= new StringBuilder(size);

if (!InternetGetCookie("http://xxxx/xxxx.htm", "Test", cookie, ref size))
{
MessageBox.Show(GetLastError().ToString());
}

else

{
MessageBox.Show(cookie.ToString());
}

 

需要注意的几点:

1、StringBuilder lpszCookieData, ref int lpdwSize 这两个变量并非绝对如此设置, 也有设置成string和long类型的,根据需要选择

2、设置cookie有两种,一种是会话级的,即脱离会话cookie即清楚,一种是持久性的,程序结束也仍然存在,直到超期。

会话级的cookie很特别,因为它是保存在内存中的,所以你在Temporary Internet Files文件夹中是找不到它的,只能在你设置cookie的应用程序中读出。而持久性cookie就可以在Temporary Internet Files文件夹中找到。这种cookie才能进行传递。两种cookie的设置程序是一样的,唯一的区别是持久性cookie设置要在cookie值后附加上“;expires=Sun,22-Feb-2099 00:00:00 GMT",过期时间可以根据需要自定。

LittlePeng | 园豆:3445 (老鸟四级) | 2009-11-07 14:40
0

webBrowser.Navigate(URL)然后就可以看到你要登陆的网页然后就可以像操作IE一样了

Tom-X | 园豆:515 (小虾三级) | 2009-11-19 14:59
0

麻烦问下这问题最终如何解决的,我也遇到该问题。

chenhaixia | 园豆:174 (初学一级) | 2013-05-23 11:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册