c# – 使用WebClient或WebRequest登录到网站并访问数据
发布时间:2020-12-15 04:10:00 所属栏目:百科 来源:网络整理
导读:我正在使用WebClient / WebRequest访问网站上的受限数据.该网站没有官方的API,所以我想要做的只是填写 HTML表单并将值发布到服务器,以便我登录. 我试过this和this,但看起来不像即将到来的请求被登录. 后一个例子更具吸引力,因为我显然更喜欢WebClient,但遗留
我正在使用WebClient / WebRequest访问网站上的受限数据.该网站没有官方的API,所以我想要做的只是填写
HTML表单并将值发布到服务器,以便我登录.
我试过this和this,但看起来不像即将到来的请求被登录. 后一个例子更具吸引力,因为我显然更喜欢WebClient,但遗留的WebRequest将会做. 无论如何,在第一个例子中,我认为它已经登录,但访问私有数据的即将到来的请求返回一个包含消息“这只是成员内容”的页面. 如何使WebClient永久登录? 解决方法
这是我做的,它的作品(
credit).
先添加这个类: namespace System.Net { using System.Text; using System.Collections.Specialized; public class CookieAwareWebClient : WebClient { public void Login(string loginPageAddress,NameValueCollection loginData) { CookieContainer container; var request = (HttpWebRequest)WebRequest.Create(loginPageAddress); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; var buffer = Encoding.ASCII.GetBytes(loginData.ToString()); request.ContentLength = buffer.Length; var requestStream = request.GetRequestStream(); requestStream.Write(buffer,buffer.Length); requestStream.Close(); container = request.CookieContainer = new CookieContainer(); var response = request.GetResponse(); response.Close(); CookieContainer = container; } public CookieAwareWebClient(CookieContainer container) { CookieContainer = container; } public CookieAwareWebClient() : this(new CookieContainer()) { } public CookieContainer CookieContainer { get; private set; } protected override WebRequest GetWebRequest(Uri address) { var request = (HttpWebRequest)base.GetWebRequest(address); request.CookieContainer = CookieContainer; return request; } } } 用法: public static void Main() { var loginAddress = "www.mywebsite.com/login"; var loginData = new NameValueCollection { { "username","shimmy" },{ "password","mypassword" } }; var client = new CookieAwareWebClient(); client.Login(loginAddress,loginData); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |