c# 使用網站的身份驗證及 Cookie 的獲取與使用


C# 的 Http 訪問可以使用 .net 自帶的  HttpWebRequest, WebClient, HttpClient 類。也可以使用開源庫 RestSharp 。

RestSharp 的優點很多,最重要的一點是對於新手來說,Postman 直接提供了 RestSharp 的實現代碼。

下面給出了網站的登錄與 Cookie 的獲取使用的方式,分別用 WebRequest 和 RestSharp 實現

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Threading;
using System.IO;
using System.Net.Http;
using RestSharp;

namespace WebServer
{
    class Program
    {
        static void Main(string[] args)
        {
            if (true)
            {
                //使用RestSharp
                RestResponseCookie cookie = null;
                string html = GetHtml("http://xd:1234@192.168.0.121:8080/vetsync/v1/orders", out cookie);
                Console.WriteLine(html);
                html = GetHtml("http://192.168.0.121:8080/vetsync/v1/orders", cookie);
                Console.WriteLine(html);
            }
            else
            {
                //使用WebRequest
                string cookie;
                string html = GetHtml("http://192.168.0.121:8080/vetsync/v1/orders", "xd", "1234", out cookie);
                Console.WriteLine(html);
                html = GetHtml("http://192.168.0.121:8080/vetsync/v1/orders", cookie);
                Console.WriteLine(html);
            }
            Console.ReadLine();
        }

        //第一次使用用戶名密碼登錄(在 url 中),獲得cookie
        public static string GetHtml(string url, out RestResponseCookie cookie)
        {
            var client = new RestClient(url);
            RestRequest request = new RestRequest(Method.GET);
            request.AddHeader("Authorization", "Basic eGQ6MTIzNA==");
            IRestResponse response = client.Execute(request);
            cookie = response.Cookies[0];
            return response.Content;
        }

        //第二次及以后訪問使用cookie驗證
        public static string GetHtml(string url, RestResponseCookie cookie)
        {
            var client = new RestClient(url);
            RestRequest request = new RestRequest(Method.GET);
            request.AddCookie(cookie.Name, cookie.Value);
            IRestResponse response = client.Execute(request);
            return response.Content;
        }

        //第一次使用用戶名密碼登錄,獲得cookie
        public static string GetHtml(string url, string userName, string password, out string cookie)
        {
            WebRequest request = WebRequest.Create(url);
            request.Credentials = CredentialCache.DefaultCredentials;
            string code = Convert.ToBase64String(Encoding.Default.GetBytes(string.Format("{0}:{1}", userName, password)));
            request.Headers.Add("Authorization", "Basic " + code);
            WebResponse wrp = request.GetResponse();
            cookie = wrp.Headers.Get("Set-Cookie");
            return new StreamReader(wrp.GetResponseStream(), Encoding.Default).ReadToEnd();
        }

        //第二次及以后訪問使用cookie驗證
        public static string GetHtml(string url, string cookieStr)
        {
            WebRequest wrt = WebRequest.Create(url);
            wrt.Credentials = CredentialCache.DefaultCredentials;
            wrt.Headers.Add("Cookie", cookieStr);
            WebResponse wrp = wrt.GetResponse();
            return new StreamReader(wrp.GetResponseStream(), Encoding.Default).ReadToEnd();
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM