Winform模拟浏览器访问获取头信息cookie等

让我们一起走向未来 🎓作者简介:全栈领域优质创作者 🌐个人主页:百锦再新空间代码工作室 📞工作室:新空

让我们一起走向未来

🎓作者简介:全栈领域优质创作者
🌐个人主页:百锦再@新空间代码工作室
📞工作室:新空间代码工作室(提供各种软件服务)
💌个人邮箱:[15045666310@163]
📱个人微信:15045666310
🌐网站:https://meihua150/
💡座右铭:坚持自己的坚持,不要迷失自己!要快乐


目录

  • 让我们一起走向未来
        • 1. 使用 WebBrowser 控件
          • 1.1 添加 WebBrowser 控件
          • 1.2 使用 WebBrowser 控件访问网页
          • 1.3 获取 Cookie
        • 2. 使用 CefSharp
          • 2.1 安装 CefSharp
          • 2.2 初始化 CefSharp
          • 2.3 获取 Cookie
        • 3. 使用 HttpClient
          • 3.1 发送 HTTP 请求
          • 3.2 获取 Cookie
        • 4. 使用 Selenium WebDriver
          • 4.1 安装 Selenium WebDriver
          • 4.2 使用 Selenium WebDriver 访问网页
          • 4.3 获取 Cookie
      • 总结

在 Winform 应用程序中模拟浏览器访问并获取 HTTP 头信息和 Cookie 是一个常见的需求,尤其是在需要与 Web API 交互或自动化网页操作的场景中。本文将详细介绍如何使用不同的方法和技术来实现这一目标。

1. 使用 WebBrowser 控件

WebBrowser 控件是 Winform 中内置的一个控件,可以嵌入 IE 浏览器内核,用于显示和操作网页。虽然它的功能相对有限,但对于简单的任务来说已经足够。

1.1 添加 WebBrowser 控件
  1. 新建一个 Winform 项目。
  2. 打开工具箱,右键点击空白处,选择“选择项”。
  3. 选择“COM 组件”,勾选“Microsoft Web Browser”。
  4. 将控件拖拽到窗体上。
1.2 使用 WebBrowser 控件访问网页
private void Form1_Load(object sender, EventArgs e)
{
    axWebBrowser1.Navigate("https://www.baidu");
}
1.3 获取 Cookie

WebBrowser 控件默认只能获取没有 HttpOnly 标志的 Cookie。如果需要获取所有 Cookie,可以使用 WINAPI 的 InternetGetCookieEx 函数。

[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool InternetGetCookieEx(
    string pchURL,
    string pchCookieName,
    StringBuilder pchCookieData,
    ref uint pcchCookieData,
    int dwFlags,
    IntPtr lpReserved
);

private void GetCookies(string url)
{
    uint size = 0;
    InternetGetCookieEx(url, null, null, ref size, 0x00002000, IntPtr.Zero);
    StringBuilder cookieData = new StringBuilder((int)size);
    InternetGetCookieEx(url, null, cookieData, ref size, 0x00002000, IntPtr.Zero);
    MessageBox.Show(cookieData.ToString());
}

调用 GetCookies 方法即可获取指定 URL 的所有 Cookie。

2. 使用 CefSharp

CefSharp 是一个基于 Chromium 的开源浏览器控件,可以嵌入到 Winform 应用程序中,提供更强大的功能和更好的性能。

2.1 安装 CefSharp
  1. 新建一个 Winform 项目。
  2. 在解决方案管理器中,右键点击“引用”,选择“管理 NuGet 程序包”。
  3. 搜索并安装 CefSharp.WinForms 包。
2.2 初始化 CefSharp
public partial class Form1 : Form
{
    public ChromiumWebBrowser chromeBrowser;

    public Form1()
    {
        InitializeComponent();
        InitializeChromium();
    }

    private void InitializeChromium()
    {
        CefSettings settings = new CefSettings();
        Cef.Initialize(settings);
        chromeBrowser = new ChromiumWebBrowser("https://www.baidu");
        this.Controls.Add(chromeBrowser);
        chromeBrowser.Dock = DockStyle.Fill;
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        Cef.Shutdown();
    }
}
2.3 获取 Cookie

CefSharp 提供了多种方法来获取 Cookie,以下是一个示例:

private void button1_Click(object sender, EventArgs e)
{
    Task<CefSharp.JavascriptResponse> t = chromeBrowser.EvaluateScriptAsync("document.cookie");
    t.Wait();
    var cookie = t.Result.Result;
    MessageBox.Show(cookie.ToString());
}

或者使用标准的 CefSharp 方法:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.Load += Form1_Load;
    }

    ChromiumWebBrowser webBrower = null;
    string cookies;

    private void Form1_Load(object sender, EventArgs e)
    {
        string path = "";
        webBrower = new ChromiumWebBrowser(path);
        webBrower.Dock = DockStyle.Fill;
        webBrower.FrameLoadEnd += WebBrower_FrameLoadEnd;
        this.Controls.Add(webBrower);
        webBrower.Load("http://localhost/page1.html");
    }

    private void WebBrower_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e)
    {
        ICookieManager cookieManager = webBrower.GetCookieManager();
        CookieVisitor visitor = new CookieVisitor();
        visitor.SendCookie += visitor_SendCookie;
        cookieManager.VisitAllCookies(visitor);
    }

    private void visitor_SendCookie(CefSharp.Cookie obj)
    {
        cookies += obj.Domain.TrimStart('.') + "^" + obj.Name + "^" + obj.Value + "\r\n";
    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.textBox_cookie.Text = cookies;
    }

    public class CookieVisitor : CefSharp.ICookieVisitor
    {
        public event Action<CefSharp.Cookie> SendCookie;

        public void Dispose()
        {
        }

        public bool Visit(CefSharp.Cookie cookie, int count, int total, ref bool deleteCookie)
        {
            deleteCookie = false;
            if (SendCookie != null)
            {
                SendCookie(cookie);
            }
            return true;
        }
    }
}

3. 使用 HttpClient

HttpClient 是 .NET 中用于发送 HTTP 请求和接收响应的类,可以用于模拟浏览器访问并获取头信息和 Cookie。

3.1 发送 HTTP 请求
public static async Task<string> SendHttpRequest(string url, HttpMethod method, Dictionary<string, string> headers = null, HttpContent content = null)
{
    using (HttpClient client = new HttpClient())
    {
        if (headers != null)
        {
            foreach (var header in headers)
            {
                client.DefaultRequestHeaders.Add(header.Key, header.Value);
            }
        }

        using (HttpRequestMessage request = new HttpRequestMessage(method, url))
        {
            if (content != null)
            {
                request.Content = content;
            }

            using (HttpResponseMessage response = await client.SendAsync(request))
            {
                return await response.Content.ReadAsStringAsync();
            }
        }
    }
}
3.2 获取 Cookie
public static async Task<string> GetCookies(string url)
{
    using (HttpClientHandler handler = new HttpClientHandler())
    {
        handler.CookieContainer = new CookieContainer();
        using (HttpClient client = new HttpClient(handler))
        {
            await client.GetAsync(url);
            var cookies = handler.CookieContainer.GetCookies(new Uri(url));
            string cookieString = string.Join("; ", cookies.Cast<Cookie>().Select(c => $"{c.Name}={c.Value}"));
            return cookieString;
        }
    }
}

调用 GetCookies 方法即可获取指定 URL 的所有 Cookie。

4. 使用 Selenium WebDriver

Selenium WebDriver 是一个强大的自动化测试工具,可以用于模拟浏览器操作,包括获取头信息和 Cookie。

4.1 安装 Selenium WebDriver
  1. 新建一个 Winform 项目。
  2. 在解决方案管理器中,右键点击“引用”,选择“管理 NuGet 程序包”。
  3. 搜索并安装 Selenium.WebDriverSelenium.WebDriver.ChromeDriver 包。
4.2 使用 Selenium WebDriver 访问网页
private void btnLoad_Click(object sender, EventArgs e)
{
    var options = new ChromeOptions();
    IWebDriver driver = new ChromeDriver(options);
    try
    {
        driver.Navigate().GoToUrl("https://account.chsi/passport/login");
        driver.FindElement(By.Name("username")).SendKeys("Tom");
        driver.FindElement(By.Name("password")).SendKeys("123456");
        driver.Manage().Window.Maximize();
        string pageSource = driver.PageSource;
        Console.WriteLine(pageSource);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
    finally
    {
        driver.Quit();
    }
}
4.3 获取 Cookie
private void GetCookies(IWebDriver driver)
{
    var cookies = driver.Manage().Cookies.AllCookies;
    foreach (var cookie in cookies)
    {
        Console.WriteLine($"{cookie.Name}={cookie.Value}");
    }
}

调用 GetCookies 方法即可获取当前页面的所有 Cookie。

总结

在 Winform 应用程序中模拟浏览器访问并获取头信息和 Cookie 有多种方法,每种方法都有其优缺点。WebBrowser 控件简单易用,但功能有限;CefSharp 功能强大,但配置相对复杂;HttpClient 适用于简单的 HTTP 请求;Selenium WebDriver 适用于复杂的自动化测试场景。根据具体需求选择合适的方法,可以有效地实现模拟浏览器访问并获取所需信息。

发布者:admin,转转请注明出处:http://www.yc00.com/web/1742569402a4460211.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信