Vikash Vyas Ответов: 0

Как передать заголовок из cefsharpwebbrowser на веб-страницу (PHP).


Привет,

Я пытаюсь передать значение заголовка в PHP-файлах, когда браузер(
cefSharpWebBrowser 
) запрос на веб-страницу в WPF C#.

В моем файле кода PHP я пишу ниже логику.

able to view http headers accessing https://www.****.com/temp_header_check.php, which can be accessed from this path: 



<?php //Setting a custom header with PHP. header('custom_header_item_1: test_value');  //var_dump the headers_list() function. var_dump(headers_list()); ?> 


эта строка означает отображение всех заголовков, которые мы передали в этот PHP-файл

Что я уже пробовал:

Я попробовал ниже код для передачи значений заголовка в каждый запрошенный PHP-файл по адресу BeforeResourceLoad событие браузера. В этом коде я не получил никакой ошибки, но я не вижу, что я передал значения заголовков в PHP-файлы.

Попробуйте 1 -------------------

публичный класс CustomResourceRequestHandler : ResourceRequestHandler
{
частная строка _signature;
public CustomResourceRequestHandler(строковая подпись)
{
_signature = GetSetComanDetails.Подпись;
}

защищенное переопределение CefReturnValue OnBeforeResourceLoad(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
{
if (request.Url.Contains("https://****.com"))
{
если (!строка.IsNullOrEmpty(GetSetComanDetails.Подпись))
{
заголовки var = запрос.Заголовки;
headers["s"] = GetSetComanDetails.Подпись;
запрос.Headers = заголовки;
верните CefReturnValue.Продолжать;
}
иначе возвращайтесь на базу.OnBeforeResourceLoad(chromiumWebBrowser, браузер, фрейм, запрос, обратный вызов);
}
иначе возвращайтесь на базу.OnBeforeResourceLoad(chromiumWebBrowser, браузер, фрейм, запрос, обратный вызов);
}

}
публичный класс CustomRequestHandler : RequestHandler
{
частная строка _signature;
public CustomRequestHandler(строковая подпись)
{
_signature = GetSetComanDetails.Подпись;
}

охраняемых переопределить IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, браузер IBrowser, iframe из рамы, IRequest запрос, типа bool isNavigation, isDownload типа bool, строка requestInitiator, номер модели / ref bool в disableDefaultHandling)
{
если (запрос.URL-адрес.Содержит (префикса"https://****.ком") и усилитель; & запрос.URL-адрес.Содержит(".в PHP"))
{
если (!строка.IsNullOrEmpty(GetSetComanDetails.Подпись)) возвращает новый CustomResourceRequestHandler(GetSetComanDetails.Подпись);
иначе возвращайтесь на базу.GetResourceRequestHandler(chromiumWebBrowser, browser, frame, request, isNavigation, isDownload, requestInitiator, ref disableDefaultHandling);
}
иначе возвращайтесь на базу.GetResourceRequestHandler(chromiumWebBrowser, browser, frame, request, isNavigation, isDownload, requestInitiator, ref disableDefaultHandling);
}
}


Это событие вызывается, когда мы вызываем URL-адрес в браузере CefSharp в WPF..

chromium = (ChromiumWebBrowser)это.Метода findname("cefSharpWebBrowser");
cefSharpWebBrowser.Address = "https://****/access.php?type=desktop";
хром.RequestHandler = новый CustomRequestHandler("");


Попробуйте 2 -------------------

Реализации ниже интерфейс
CefSharp/IRequestHandler.cs at cefsharp/43 · cefsharp/CefSharp · GitHub[^]

Попробуйте 3 -------------------

хром.ResourceHandlerFactory = новый MyResourceHandlerFactory();

...

класс MyResourceHandlerFactory :IResourceHandlerFactory
{
public bool HasHandlers
{
get { return true; }
}

public IResourceHandler GetResourceHandler(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request)
{
если (запрос.URL-адрес.Как startswith("по протоколу HTTP"))
вернуть новый MyResourceHandler();
возвращать null;
}
}

...

класс MyResourceHandler : IResourceHandler
{
частная запросы WebRequest класса HttpWebRequest ;
отдельный класс httpwebresponse метода webresponse;
частный поток requestStream;
private byte[] requestBytes;
Обратный вызов ICallback;

творческий публичных трансляций(сайта iresponse ответ, с длинным responseLength, вне строковый параметр redirecturl)
{
responseLength = метода webresponse.ContentLength;
параметр redirecturl = нуль;
строковый тип = webResponse.Значение contentType;
// снимите кодировку, если она присутствует
если (тип.IndexOf("; ")>0)
тип = тип.Подстрока(0,Тип.Помощи indexOf("; "));
response.MimeType = тип;
// здесь работает только прямое присвоение, не пытайтесь использовать другие методы коллекции name/value;
ответ.ResponseHeaders = webResponse.Заголовки;
ответ.StatusCode = (int)webResponse.свойство statusCode;
ответ.Statustext также = метода webresponse.StatusDescription;
// TODO возвращает оболочку вокруг этого потока, чтобы захватить встроенный ответ.
верните webResponse.GetResponseStream();
}

private void SendRequestBody(результат IAsyncResult)
{
requestStream = запросы WebRequest.EndGetRequestStream(результат);
requestStream.BeginWrite(requestBytes, 0, requestBytes.Длина, RequestSent, null);
}

частный недействительными RequestSent(объекта iasyncresult АР)
{
requestStream.EndWrite(ar);
requestStream.Закрывать();
веб-запрос.BeginGetResponse(new AsyncCallback(Response), null);
}

частный ответ void(IAsyncResult ar)
{
метода webresponse = (класс httpwebresponse)запросы WebRequest.EndGetResponse(ar);
обратный звонок.Продолжать();
}

public bool ProcessRequestAsync(запрос IRequest, обратный вызов ICallback)
{
это.обратного вызова = обратного вызова;
webRequest = (HttpWebRequest)WebRequest.Создать(запрос.URL-адрес);
веб-запрос.Метод = запрос.Метод;
foreach (строковый ключ в запросе.Заголовки)
{
строковое значение = запрос.Заголовки[ключ];
// HttpWebRequest не нравится, если вы пытаетесь установить эти значения через коллекцию заголовков
если ("принять".Равно(ключ))
веб-запрос.Принимаем = значение;
else if ("User-Agent".Равно(ключ))
веб-запрос.UserAgent = значение;
еще если ("реферер".Равно(ключ))
веб-запрос.Реферер = значение;
else if ("Content-Type".Равно(ключ))
веб-запрос.ContentType = значение;
else if ("Content-Length".Равно(ключ))
веб-запрос.ContentLength=Конвертировать.ToInt32(значение);
еще
веб-запрос.Заголовки.Добавить(ключ, значение);
}
если (!строка.IsNullOrWhiteSpace(запрос.Тело))
{
это.requestBytes = кодировка.Кодировке utf8.GetBytes(запрос.Тело);
веб-запрос.BeginGetRequestStream(new AsyncCallback(SendRequestBody), null);
}
еще
{
веб-запрос.BeginGetResponse(new AsyncCallback(Response), null);
}
вернуть true;
}
}

0 Ответов