直接贴图
请高手们帮我解决一下,十分感谢~~
在this.close()前面再提交一次服务请求呢?(就是把前面验证的过程再执行一次)
我认为原因是.Net的库中的WebRequest和你开启的IE进程之间,session不能共享。
如下调用:
至于设置的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",过期时间可以根据需要自定。
webBrowser.Navigate(URL)然后就可以看到你要登陆的网页然后就可以像操作IE一样了
麻烦问下这问题最终如何解决的,我也遇到该问题。