直播修仙:使用.NET 的 WebView2 如何获取请求的响应内容,以微信直播的互动直播为例

简介: 使用.NET 的 WebView2 如何获取请求的响应内容进行进一步处理

背景

近几年直播行业快速发展,门槛也越来越低,越来越的人涌入直播大军。不得不说,直播不仅带来了更多的娱乐消遣,还提供了一个新型的就业方式。

说起直播的类型,有一个非常小众的娱乐直播,没有主播,全靠观众的弹幕互动。比如:直播修仙,观众发弹幕进入修仙,就可以看到自己的打坐小人,然后屏幕各种随机事件,送主播礼物可以获取各种道具。近期在微信刷视频号的时候,发现了好多类似的互动直播,有云蹦迪和各种互动游戏。

视频号直播截图

今天我们只聊技术,互动直播平台没有提供相关的 API 如何通过观众的评论来互动的?

实现原理

这里以微信视频号直播为例,介绍一种获取直播事件消息的方法,当然方法也适用于类似的其他平台。

视频号开启直播的时候在视频号的 Web 管理后台,会同时看到观众发送的评论和产生的其他互动。那么只需要通过开发一个浏览器插件就可以实现实时获取评论信息。这里我们
通过 WebView2 来获取请求评论的响应内容来实现。

实现步骤

首先创建一个 WPF 应用,添加 Microsoft.Web.WebView2 包,然后页面添加WebView2组件,首页直接为视频号管理后台。

<Grid>
    <Wpf:WebView2 Source="https://channels.weixin.qq.com/platform/live/liveBuild" MinWidth="800" MinHeight="500" Name="webView"/>
</Grid>

WebView2初始化完成后绑定WebResourceResponseReceived事件。此事件可以获取到所有请求的响应内容,这里只需要获取/mmfinderassistant-bin/live/msg的链接请求即可,然后读取返回的内容。

public MainWindow()
{
    InitializeComponent();
    webView.CoreWebView2InitializationCompleted += WebView_CoreWebView2InitializationCompleted;
}

private void WebView_CoreWebView2InitializationCompleted(object? sender, Microsoft.Web.WebView2.Core.CoreWebView2InitializationCompletedEventArgs e)
{
    webView.CoreWebView2.WebResourceResponseReceived += CoreWebView2_WebResourceResponseReceivedAsync;
}

private async void CoreWebView2_WebResourceResponseReceivedAsync(object? sender, CoreWebView2WebResourceResponseReceivedEventArgs e)
{
    if (e.Request.Uri.EndsWith("/mmfinderassistant-bin/live/msg") && e.Response != null && e.Response.StatusCode==200)
    {
        Stream content = await e.Response.GetContentAsync();
        string jsonText = new StreamReader(content).ReadToEnd();
        var list = ToLiveMsg(jsonText);
    }
}

以下是内容的处理。

public List<LiveMsg> ToLiveMsg(string str) {
    JsonNode jsonNode = JsonNode.Parse(str)!;
    var res = new List<LiveMsg>();
    var dataInfo = jsonNode["data"];
    if (dataInfo is null) return res;
    if (dataInfo["msgList"] is null) return res;

    foreach (var item in dataInfo["msgList"]!.AsArray())
    {
        var msg = JsonSerializer.Deserialize<LiveMsg>(item);
        Debug.Print(msg.ToString());
        res.Add(msg!);
    }
    return res;
}

/// <summary>
/// 直播互动消息内容
/// </summary>
/// <param name="nickname">昵称</param>
/// <param name="headUrl">头像URL</param>
/// <param name="content">消息内容</param>
/// <param name="type">消息类型</param>
/// <param name="username">用户ID</param>
/// <param name="clientMsgId">消息ID</param>
public record LiveMsg(string nickname,string headUrl,string content,int type,string username,string clientMsgId);

最后

这里介绍了评论的获取方式,点赞和礼物的消息,可以通过类似的方式审查请求获取到对应的内容。本文虽以互动直播为例,但主要为介绍如何使用.NET 的 WebView2 获取请求的响应内容。如果你对这种互动直播感兴趣可以通过 .NET 技术自己开发一个新的互动直播模式。

相关文章
|
4月前
|
开发框架 缓存 .NET
并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流
并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流
215 0
|
3月前
|
小程序 开发者
微信小程序之网络数据请求 wx:request的简单使用
这篇文章介绍了微信小程序中如何使用wx.request进行网络数据请求,包括请求的配置、请求的格式以及如何在开发阶段关闭请求的合法检验。
微信小程序之网络数据请求 wx:request的简单使用
|
4月前
|
数据采集 JSON API
异步方法与HTTP请求:.NET中提高响应速度的实用技巧
本文探讨了在.NET环境下,如何通过异步方法和HTTP请求提高Web爬虫的响应速度和数据抓取效率。介绍了使用HttpClient结合async和await关键字实现异步HTTP请求,避免阻塞主线程,并通过设置代理IP、user-agent和cookie来优化爬虫性能。提供了代码示例,演示了如何集成这些技术以绕过目标网站的反爬机制,实现高效的数据抓取。最后,通过实例展示了如何应用这些技术获取API的JSON数据,强调了这些方法在提升爬虫性能和可靠性方面的重要性。
异步方法与HTTP请求:.NET中提高响应速度的实用技巧
|
2月前
|
API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
28 0
|
3月前
|
小程序 PHP
微信小程序给 thinkphp后端发送请求出现错误 Wrong number of segments 问题的解决 【踩坑记录】
本文记录了微信小程序向ThinkPHP后端发送请求时出现"Wrong number of segments"错误的解决方法。问题原因是小程序请求header中的token变量名写错,导致token未正确传递至后端。作者提供了详细的检查步骤和建议,包括验证URL路径、参数规范和路由配置的匹配,以确保请求能正确发送和处理。
|
4月前
|
数据采集 API 开发者
.NET 8新特性:使用ConfigurePrimaryHttpMessageHandler定制HTTP请求
在.NET 8中,通过`ConfigurePrimaryHttpMessageHandler`方法,开发者能更精细地控制HTTP请求,这对于构建高效爬虫尤为重要。此特性支持定制代理IP、管理Cookie与User-Agent,结合多线程技术,有效应对网络限制及提高数据采集效率。示例代码展示了如何设置代理服务器、模拟用户行为及并发请求,从而在遵守网站规则的同时,实现快速稳定的数据抓取。
.NET 8新特性:使用ConfigurePrimaryHttpMessageHandler定制HTTP请求
|
4月前
|
数据采集 开发框架 .NET
HttpClient在ASP.NET Core中的最佳实践:实现高效的HTTP请求
在现代Web开发中,高效可靠的HTTP请求对应用性能至关重要。ASP.NET Core提供的`HttpClient`是进行这类请求的强大工具。本文探讨其最佳实践,包括全局复用`HttpClient`实例以避免性能问题,通过依赖注入配置预设头部信息;使用代理IP以防IP被限制;设置合理的`User-Agent`和`Cookie`来模拟真实用户行为,提高请求成功率。通过这些策略,可显著增强爬虫或应用的稳定性和效率。
105 0
HttpClient在ASP.NET Core中的最佳实践:实现高效的HTTP请求
|
4月前
.NET Core 在其上下文中,该请求的地址无效。
.NET Core 在其上下文中,该请求的地址无效。
38 0
|
6月前
|
开发工具
微信客服系统开发SDK使用教程- 拉取当前微信个人号列表请求(立即)
微信客服系统开发SDK使用教程- 拉取当前微信个人号列表请求(立即)
|
7月前
|
JSON 编解码 Go
Golang深入浅出之-HTTP客户端编程:使用net/http包发起请求
【4月更文挑战第25天】Go语言`net/http`包提供HTTP客户端和服务器功能,简化高性能网络应用开发。本文探讨如何发起HTTP请求,常见问题及解决策略。示例展示GET和POST请求的实现。注意响应体关闭、错误处理、内容类型设置、超时管理和并发控制。最佳实践包括重用`http.Client`,使用`context.Context`,处理JSON以及记录错误日志。通过实践这些技巧,提升HTTP编程技能。
79 1