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

请教怎么使用Wininet实现HTTP的身份验证

2012-01-11 
请问如何使用Wininet实现HTTP的身份验证举个例子,有一个web网站在IIS里面禁用了匿名访问,只能使用身份验证

请问如何使用Wininet实现HTTP的身份验证
举个例子,有一个web网站在IIS里面禁用了匿名访问,只能使用身份验证的方式访问。即在IE地址栏里输入该网站的web页面,会弹一个身份验证的Windows窗口,要求用户输入用户名和密码,用户通过验证后,即可访问该网站的所有内容。

现要求写一个输入网页地址,用户名,密码,提交后抓取该网页内容的客户端程序,要求可以支持上面这种设置的网站。打算使用Wininet进行开发,前面的代码类似如下:
        CString   strHttpUrl=this-> m_strWebURL;   //   需要提交数据的页面
        CInternetSession   sess;
        CHttpFile*   fileGet;
        CString   strHeaders   =   _T( "Content-Type:   application/x-www-form-urlencoded ");   //   请求头

        try
        {
                fileGet=(CHttpFile*)sess.OpenURL(strHttpUrl);//打开文件
        }
        catch(CException*   e)
        {
                fileGet   =   0;
                throw;
        }
请问该怎么写身份验证的代码?

[解决办法]
string url = "http://my.b2b.hc360.com/my/turbine/template/firstview,other_login.html ";

string indata = @ "LoginID=mytestcs&Passwd=aabbccdd&LoginChk=true&Submit=%B5%C7%A1%A1%A1%A1%C2%BC ";

string outdata= " ";

CookieContainer myCookieContainer=new CookieContainer();
//新建一个CookieContainer来存放Cookie集合
HttpWebRequest myHttpWebRequest=(HttpWebRequest)WebRequest.Create(url);
//新建一个HttpWebRequest
myHttpWebRequest.ContentType= "application/x-www-form-urlencoded ";
myHttpWebRequest.ContentLength=indata.Length;
myHttpWebRequest.Method= "POST ";
myHttpWebRequest.CookieContainer=myCookieContainer;
//设置HttpWebRequest的CookieContainer为刚才建立的那个myCookieContainer
Stream myRequestStream=myHttpWebRequest.GetRequestStream();
StreamWriter myStreamWriter=new StreamWriter(myRequestStream,Encoding.GetEncoding( "gb2312 "));
myStreamWriter.Write(indata);
//把数据写入HttpWebRequest的Request流
myStreamWriter.Close();
myRequestStream.Close();

//关闭打开对象
HttpWebResponse myHttpWebResponse=(HttpWebResponse)myHttpWebRequest.GetResponse();
//新建一个HttpWebResponse
myHttpWebResponse.Cookies=myCookieContainer.GetCookies(myHttpWebRequest.RequestUri);
//获取一个包含url的Cookie集合的CookieCollection
Stream myResponseStream=myHttpWebResponse.GetResponseStream();
StreamReader myStreamReader=new StreamReader(myResponseStream,Encoding.GetEncoding( "gb2312 "));
outdata=myStreamReader.ReadToEnd();
//把数据从HttpWebResponse的Response流中读出
myStreamReader.Close();
myResponseStream.Close();
Console.WriteLine(outdata);
//显示 "登录 "

//拿到了Cookie,再进行请求就能直接读取到登录后的内容了
myHttpWebRequest=(HttpWebRequest)WebRequest.Create(url);
myHttpWebRequest.CookieContainer=myCookieContainer;//*
//刚才那个CookieContainer已经存有了Cookie,把它附加到HttpWebRequest中则能直接通过验证
myHttpWebResponse=(HttpWebResponse)myHttpWebRequest.GetResponse();
myHttpWebResponse.Cookies=myCookieContainer.GetCookies(myHttpWebRequest.RequestUri);
myResponseStream=myHttpWebResponse.GetResponseStream();


myStreamReader=new StreamReader(myResponseStream,Encoding.GetEncoding( "gb2312 "));
outdata=myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
Console.WriteLine(outdata);

热点排行