![](/img/trans.png)
[英]How do I determine local IP address which can connect to a given remote IP/DNS Address
[英]PuppeteerSharp - How to connect BrowserWSEndpoint using local IP address?
根据这篇文章,可以使用 http-proxy 节点模块将 puppeteer 连接到本地 IP 地址。 但是我怎样才能在 PupperSharp(C#) 中实现这个呢? 是否有任何等效的 nuget 库?
更多上下文:如果您在主机上启动 PuppeteerSharp,获取它的 websocket URL 并更改它的主机:
var browser = await Puppeteer.LaunchAsync(new() { Headless = false });
Console.WriteLine(new UriBuilder(browser.WebSocketEndpoint){ Host = "192.168.0.199" });
在另一台主机上尝试连接:
await Puppeteer.ConnectAsync(new(){ BrowserWSEndpoint = "ws://192.168.0.199:60597/devtools/browser/5f79c230-7e69-49f5-8f12-816c343cf4f8" })
连接拒绝异常显示。
带有直接转发的 Yarp 反向代理就是答案:
服务器代码:(ASP.NET 核心最小 API):
Dictionary<string, string> routes = new();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.Map("/connect/{**catch-all}", async httpContext =>
{
var route = httpContext.Request.GetDisplayUrl();
await app.Services.GetRequiredService<IHttpForwarder>().SendAsync(
httpContext,
routes.TryGetValue(Path.GetFileName(new Uri(route).AbsolutePath), out string targetRoute) ? targetRoute : route,
new HttpMessageInvoker(new SocketsHttpHandler()
{
UseProxy = false,
AllowAutoRedirect = false,
AutomaticDecompression = DecompressionMethods.None,
UseCookies = false,
ActivityHeadersPropagator = new ReverseProxyPropagator(DistributedContextPropagator.Current)
})
);
});
});
app.MapGet("/", async () =>
{
var b = await Puppeteer.LaunchAsync(new()
{
ExecutablePath = browserPath // set your chrome directory
});
var id = Path.GetFileName(b.WebSocketEndpoint);
routes.Add(id, b.WebSocketEndpoint);
return $"ws://your-server-ip-address/connect/{id}";
});
app.Run();
客户端代码:
await Puppeteer.ConnectAsync(new() { BrowserWSEndpoint = await httpClient.GetStringAsync("http://your-server-ip-address") })
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.