WebView2 с Proxy
От: Passerby  
Дата: 15.07.25 00:25
Оценка:
Сделал, как написано в ответе https://learn.microsoft.com/en-us/answers/questions/247173/how-to-use-proxy-for-current-version-of-webview2-( Но все равно прокси не работает. Есть еще https://github.com/MicrosoftEdge/WebView2Feedback/issues/132 Но там нет кода. Может, кто делал WebView2 с Proxy?
Re: WebView2 с Proxy
От: bnk СССР http://unmanagedvisio.com/
Дата: 15.07.25 14:13
Оценка: 3 (1)
Здравствуйте, Passerby, Вы писали:

P>Сделал, как написано в ответе https://learn.microsoft.com/en-us/answers/questions/247173/how-to-use-proxy-for-current-version-of-webview2-( Но все равно прокси не работает.


Все должно работать, ответ верный. Ты точно не делаешь ту же ошибку что и спрашивающий там (не ставишь Source до инициализации?)
В дизайнере, например (в проперти шите)
Отредактировано 15.07.2025 14:14 bnk . Предыдущая версия .
Re[2]: WebView2 с Proxy
От: Passerby  
Дата: 15.07.25 18:52
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>Все должно работать, ответ верный.

Можете скинуть код проекта. Сколько код не меняю или ничего не выходит, или ошибка.
Re[3]: WebView2 с Proxy
От: bnk СССР http://unmanagedvisio.com/
Дата: 15.07.25 18:57
Оценка:
Здравствуйте, Passerby, Вы писали:

P>Здравствуйте, bnk, Вы писали:


bnk>>Все должно работать, ответ верный.

P>Можете скинуть код проекта. Сколько код не меняю или ничего не выходит, или ошибка.

Только что проверил.

1. Создать новый WinForms, добавить на форму WebView2 (myWebView2).
2. Поменять инициализацию как написано в том ответе.
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private async void Form1_Load(object sender, EventArgs e)
        {
            var options = new CoreWebView2EnvironmentOptions
            {
                AdditionalBrowserArguments = "--proxy-server=http://5.161.131.126:8081"
            };
            var env = await CoreWebView2Environment.CreateAsync(null, null, options);
            await myWebView2.EnsureCoreWebView2Async(env);

            myWebView2.Source = new Uri("https://whatismyipaddress.com/");
        }
    }
Отредактировано 15.07.2025 19:00 bnk . Предыдущая версия . Еще …
Отредактировано 15.07.2025 18:58 bnk . Предыдущая версия .
Re[4]: WebView2 с Proxy
От: Passerby  
Дата: 15.07.25 23:19
Оценка:
bnk>Только что проверил.
Проверь на ресурсе, который без прокси не работает, к примеру https://x.com/elonmusk
Скорее всего проверка была, с неподключенным Form1_Load(object sender, EventArgs e), т.е. все проходило без прокси. При подключении возникает ошибка на строке await BingWebView.EnsureCoreWebView2Async(env);
System.ArgumentException: "WebView2 was already initialized with a different CoreWebView2Environment. Check to see if the Source property was already set or EnsureCoreWebView2Async was previously called with different values."
Re[5]: WebView2 с Proxy
От: bnk СССР http://unmanagedvisio.com/
Дата: 16.07.25 08:40
Оценка:
Здравствуйте, Passerby, Вы писали:

bnk>>Только что проверил.


P>Проверь на ресурсе, который без прокси не работает, к примеру https://x.com/elonmusk


У меня он работает без прокси

P>Скорее всего проверка была, с неподключенным Form1_Load(object sender, EventArgs e), т.е. все проходило без прокси. При подключении возникает ошибка на строке await BingWebView.EnsureCoreWebView2Async(env);


Нет, все работает — посмотри какой сайт там открывается в примере — whatismyipaddress. показывает ip прокси.

P>System.ArgumentException: "WebView2 was already initialized with a different CoreWebView2Environment. Check to see if the Source property was already set or EnsureCoreWebView2Async was previously called with different values."


Ну я и говорю, ты уже где-то инициализируешь его до Form_Load (ставишь Source?)
Ты сделал как написано выше, по шагам (1, 2)?
Отредактировано 16.07.2025 9:49 bnk . Предыдущая версия . Еще …
Отредактировано 16.07.2025 9:48 bnk . Предыдущая версия .
Отредактировано 16.07.2025 8:45 bnk . Предыдущая версия .
Отредактировано 16.07.2025 8:41 bnk . Предыдущая версия .
Re[6]: WebView2 с Proxy
От: Passerby  
Дата: 16.07.25 12:08
Оценка:
Отредактировано 16.07.2025 14:48 Passerby . Предыдущая версия . Еще …
Отредактировано 16.07.2025 12:49 Passerby . Предыдущая версия .
Отредактировано 16.07.2025 12:09 Passerby . Предыдущая версия .
Re[7]: WebView2 с Proxy
От: Passerby  
Дата: 16.07.25 13:16
Оценка:
Отредактировано 16.07.2025 14:49 Passerby . Предыдущая версия .
Re[8]: WebView2 с Proxy
От: Passerby  
Дата: 16.07.25 13:19
Оценка:
Отредактировано 16.07.2025 14:50 Passerby . Предыдущая версия . Еще …
Отредактировано 16.07.2025 13:22 Passerby . Предыдущая версия .
Re[9]: WebView2 с Proxy
От: Passerby  
Дата: 16.07.25 13:30
Оценка:
Здравствуйте, Passerby, Вы писали:

bnk>>>У меня он работает без прокси

Кто провайдер?

bnk>>>Ну я и говорю, ты уже где-то инициализируешь его до Form_Load (ставишь Source?)

Нет, Source не ставлю.
bnk>>>Ты сделал как написано выше, по шагам (1, 2)?
Сделал снова.
Новое приложение Form от Microsoft. Или нужен с FrameWork? Net 9.0.
Установил в NuGet WebView2.
Дополнил конструктор Form1.
К событию Load подсоединил метод Form1_Load(object sender, EventArgs e).
Запустил отладку, ошибка на строке await myWebView2.EnsureCoreWebView2Async(env);
using Microsoft.Web.WebView2.Core;
//using Microsoft.Web.WebView2.WinForms;
namespace WinFormsApp1
{
    public partial class Form1 : Form
    {
        //private readonly WebView2 myWebView2 = new WebView2(); уже есть определение
        public Form1()
        {
            InitializeComponent();
            myWebView2.CreationProperties = null;
            myWebView2.Location = new Point(10, 65);
            myWebView2.Name = "myWebView2";
            myWebView2.Size = new Size(1750, 780);
            myWebView2.Source = new Uri("https://www.bing.com/", UriKind.Absolute);
            myWebView2.TabIndex = 0;
            myWebView2.ZoomFactor = 1D;
            myWebView2.Visible = true;
            this.SuspendLayout();
            ClientSize = new Size(1800, 800);
            Controls.Add(myWebView2);
            Name = "Form1";
            Text = "Form1";
            ResumeLayout(false);
        }
        private async void Form1_Load(object sender, EventArgs e)
        {
            CoreWebView2EnvironmentOptions Options = new CoreWebView2EnvironmentOptions();
            Options.AdditionalBrowserArguments = "--proxy-server=http://1.2.3.4:8888";
            CoreWebView2Environment env =
                await CoreWebView2Environment.CreateAsync(null, null, Options);
            await myWebView2.EnsureCoreWebView2Async(env);
        }
    }
}

namespace WinFormsApp1
{
    partial class Form1
    {
        /// <summary>
        ///  Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;
        /// <summary>
        ///  Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
        #region Windows Form Designer generated code

        /// <summary>
        ///  Required method for Designer support - do not modify
        ///  the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            myWebView2 = new Microsoft.Web.WebView2.WinForms.WebView2();
            ((System.ComponentModel.ISupportInitialize)myWebView2).BeginInit();
            SuspendLayout();
            // 
            // webView21
            // 
            myWebView2.AllowExternalDrop = true;
            myWebView2.CreationProperties = null;
            myWebView2.DefaultBackgroundColor = Color.White;
            myWebView2.Location = new Point(12, 52);
            myWebView2.Name = "myWebView2";
            myWebView2.Size = new Size(776, 372);
            myWebView2.TabIndex = 0;
            myWebView2.ZoomFactor = 1D;
            // 
            // Form1
            // 
            AutoScaleDimensions = new SizeF(7F, 15F);
            AutoScaleMode = AutoScaleMode.Font;
            ClientSize = new Size(800, 450);
            Controls.Add(myWebView2);
            Name = "Form1";
            Text = "Form1";
            Load += Form1_Load;
            ((System.ComponentModel.ISupportInitialize)myWebView2).EndInit();
            ResumeLayout(false);
        }

        #endregion

        private Microsoft.Web.WebView2.WinForms.WebView2 myWebView2;
    }
}


И непонятно, зачем вынесено в конструктор Form1 строки, которые есть в InitializeComponent(); Можно их оставить либо в конструкторе, либо в InitializeComponent().
Отредактировано 16.07.2025 14:55 Passerby . Предыдущая версия .
Re[7]: WebView2 с Proxy
От: bnk СССР http://unmanagedvisio.com/
Дата: 16.07.25 13:52
Оценка: 3 (1)
Здравствуйте, Passerby, Вы писали:

bnk>>У меня он работает без прокси


P>Кто провайдер?


T-Mobile. Но я в Австрии

P>Новое приложение Form от Microsoft. Или нужен с FrameWork? Net 9.0.


Вот здесь возможно разница — я делал WinForms на Framework 4.8 (т.е. не на "core")
Попробовал с .NET9 — так же все работает..

P>Установил в NuGet WebView2.

P>Дополнил конструктор Form1.
P>К событию Load подсоединил метод Form1_Load(object sender, EventArgs e).
P>Запустил отладку, ошибка на строке await myWebView2.EnsureCoreWebView2Async(env);
P>System.ArgumentException: "WebView2 was already initialized with a different CoreWebView2Environment. Check to see if the Source property was already set or EnsureCoreWebView2Async was previously called with different values."

Ну так а вот это что, как не установка Source, или я чего-то не вдупляю?
Ниже, длинная строчка

P>
P>using Microsoft.Web.WebView2.Core;
P>using Microsoft.Web.WebView2.WinForms;
P>namespace WinFormsApp1
P>{
P>    public partial class Form1 : Form
P>    {
P>        private readonly WebView2 myWebView2 = new WebView2();
P>        public Form1()
P>        {
P>            InitializeComponent();
P>            myWebView2.CreationProperties = null;
P>            myWebView2.Location = new Point(10, 65);
P>            myWebView2.Name = "BingWebView";
P>            myWebView2.Size = new Size(1750, 780);
P>            myWebView2.Source = new Uri("https://www.bing.com/", UriKind.Absolute); <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ?????
P>            myWebView2.TabIndex = 0;
P>            myWebView2.ZoomFactor = 1D;
P>            myWebView2.Visible = true;
P>            this.SuspendLayout();
P>            ClientSize = new Size(1800, 800);
P>            Controls.Add(myWebView2);
P>            Name = "Form1";
P>            Text = "Form1";
P>            ResumeLayout(false);
P>        }

P>        private async void Form1_Load(object sender, EventArgs e)
P>        {
P>            var options = new CoreWebView2EnvironmentOptions
P>            {
P>                AdditionalBrowserArguments = "--proxy-server=http://5.161.131.126:8081"
P>            };
P>            var env = await CoreWebView2Environment.CreateAsync(null, null, options);
P>            await myWebView2.EnsureCoreWebView2Async(env);

P>            myWebView2.Source = new Uri("https://whatismyipaddress.com/");
P>        }
P>    }
P>}
P>
Отредактировано 16.07.2025 14:02 bnk . Предыдущая версия .
Re[8]: WebView2 с Proxy
От: Passerby  
Дата: 16.07.25 16:21
Оценка:
Отредактировано 17.07.2025 11:21 Passerby . Предыдущая версия .
Re[9]: WebView2 с Proxy
От: Passerby  
Дата: 16.07.25 19:14
Оценка:
Здравствуйте, Passerby, Вы писали:

P>Здравствуйте, bnk, Вы писали:


bnk>>Вот здесь возможно разница — я делал WinForms на Framework 4.8 (т.е. не на "core")

bnk>>Попробовал с .NET9 — так же все работает..

P>Попробовал с Framework, та же ошибка.


bnk>>Ну так а вот это что, как не установка Source, или я чего-то не вдупляю?

bnk>>Ниже, длинная строчка
P>Я решил, что речь про Source, который можно указать в свойствах myWebView2. Т.е. щелчок правой кнопкой на элементе в форме, что сразу попадает в InitializeComponent();
Отредактировано 17.07.2025 11:22 Passerby . Предыдущая версия .
Re[8]: WebView2 с Proxy
От: Passerby  
Дата: 16.07.25 19:19
Оценка: :)
Здравствуйте, bnk, Вы писали:
Спасибо, с прокси, которые не требуют авторизации, все работает.
К сожалению программа не работает с прокси, которым нужно логин и пароль. Нашел, что в таком случае можно попробовать формат http://username:password@proxy.example.org:port, подставил все свои данные, но программа не заработала. Либо нужен другой формат, либо WebView2 работает только с прокси без авторизации. Может, кто знает?
Отредактировано 16.07.2025 19:20 Passerby . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.