c# - 从 Webbrowser 获取 Authorization Bearer 到 WebRequest
问题描述
我在网站上使用 Webbrowser 控件登录。
网络浏览器包含授权:
承载 Vw1Ta8yPpKV6N2bUOdyy....
在标题中。
我能以某种方式从控制中获取它的信息吗?我用“GetCookieContainer()”检查了 cookie,但找不到任何授权字段。
解决方案
我找到了下一个解决方案,将 javascript 注入页面。在此之后,您可以使用 _Bearer_Access_token 向您的网站发出任何请求。
string _Bearer_Access_token = "";
HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
HtmlElement scriptEl_ = webBrowser1.Document.CreateElement("script");
IHTMLScriptElement element = (IHTMLScriptElement)scriptEl_.DomElement;
element.text = @"function GetBearer()
{
var parent = document.getElementsByTagName('head')[0];
var aTag = document.createElement('a');
for ( var i = 0, len = localStorage.length; i < len; ++i ) {
aTag.innerHTML += localStorage.getItem( localStorage.key( i ) );
}
parent.appendChild(aTag);
}";
head.AppendChild(scriptEl_);
webBrowser1.Document.InvokeScript("GetBearer");
HtmlElement head2 = webBrowser1.Document.GetElementsByTagName("head")[0];
HtmlElement scriptEl2_ = webBrowser1.Document.GetElementsByTagName("a")[0];
if (scriptEl2_.InnerText.IndexOf('{') > 0)
{
string LocalVariables_ = scriptEl2_.InnerText.Substring(scriptEl2_.InnerText.IndexOf('{'));
LocalVariables_ = LocalVariables_.Replace("}{", "}@@@BTWOBJ@@@{");
string[] ObjectArr_ = LocalVariables_.Split(new string[] { "@@@BTWOBJ@@@" }, StringSplitOptions.RemoveEmptyEntries);
for (int i_ = 0; i_ < ObjectArr_.Length; i_++)
{
JToken token_ = JObject.Parse(ObjectArr_[i_]);
token_ = token_.SelectToken("access_token");
if (token_ != null)
{
_Bearer_Access_token = token_.Value<string>();
if (_Bearer_Access_token.Length > 0)
{
break;
}
}
}
}
推荐阅读
- flutter - 尝试使用 Flutter 在主页上显示用户名
- python - 从 word2vec 中提取词嵌入
- docker - Kubernetes 在哪里存储缓存图像以供“IfNotPresent”-CachePolicy 使用以及如何删除缓存?
- android - 更新后如何使回收站视图不滚动回顶部
- python - 转换 Pandas DataFrame 日期,以便我可以选择特定日期
- javascript - React 和 Material UI 第二个选择器取决于第一个选择
- javascript - 在多条件下拉过滤器中,如何显示结果内容?
- database - 应用程序用户的列级安全“策略”
- c# - 如何将参数传递给 Xamarin 中的自定义 ViewCell?
- javascript - 在 CSS 中使用 Overflow-X 时如何防止元素换行?