Требуется аутентификация через прокси-сервер cefsharp
Я пытаюсь использовать прокси с аутентификацией на cefsharp, я попробовал этот код, и он работает с прокси без аутентификации только то, что я должен сделать, чтобы установить аутентификацию.
Cef.UIThreadTaskFactory.StartNew(delegate
{
string ip = "IP";
string port = "PORT";
var rc = chrome.GetBrowser().GetHost().RequestContext;
var dict = new Dictionary<string, object>();
dict.Add("mode", "fixed_servers");
dict.Add("server", "" + ip + ":" + port + "");
string error;
bool success = rc.SetPreference("proxy", dict, out error);
});
Я нашел эту ссылку, но я не понимаю, как это сделать
https://bitbucket.org/chromiumembedded/cef/wiki/GeneralUsage.md#markdown-header-proxy-resolution пожалуйста, напишите какой-то код, я начинающий.
2 ответа
На этот раз я вернулся с реальным ответом.
Что вам нужно сделать, это реализовать свой собственный класс с помощью IRequestHandler и вызвать GetAuthCredentials().
public class MyRequestHandler : IRequestHandler
{
bool IRequestHandler.GetAuthCredentials(IWebBrowser browserControl, IBrowser browser, IFrame frame, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback)
{
if (isProxy == true)
{
callback.Continue("Username", "Password");
return true;
}
return false;
}
}
Callback.Continue() применит учетные данные для вас при вызове.
Затем вы реализуете обработчик для своего экземпляра браузера в коде, который у вас уже есть.
Cef.UIThreadTaskFactory.StartNew(delegate
{
chrome.RequestHandler = new MyRequestHandler();
string ip = "IP";
string port = "PORT";
var rc = chrome.GetBrowser().GetHost().RequestContext;
var dict = new Dictionary<string, object>();
dict.Add("mode", "fixed_servers");
dict.Add("server", "" + ip + ":" + port + "");
string error;
bool success = rc.SetPreference("proxy", dict, out error);
});
Я использую Cefsharp версии 65, просто используйте этот код:
CefSharpSettings.Proxy = new ProxyOptions(ip: "myipaddress", port: "myport", username: "myusername", password: "mypassword");
Поместите это перед Cef.Initialize(), и это работает для меня