加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读