我需要显示一些来自远程Apache网络服务器的网页,用于我正在开发的IoT核心应用程序。我已经对非受保护的页面使用了WebView类方法.Navigate(),它的工作非常简洁。但是,对于我的项目,我需要首先登录到webserver(用户名+密码),然后从页面中检索信息,但我不知道如何使用WebView类来完成。我很无能为力。
我找到了一个使用WebBrowser类Navigate()的解决方案,将凭证作为64个基本编码的字符串发送,但WebView的Navigate()只允许1个参数,URI,而不是其他任何内容。我似乎无法找到WebBrowser类。
我已经尝试将用户名/密码嵌入到URI中,但它无法正常工作,我知道这样做并不是一个好主意。
是否可以使用WebView实现此目的?任何建议/想法?
任何帮助表示赞赏
编辑:我找到了一个适用于我的问题的解决方案,我发布它是为了对有类似问题的人提供帮助。
Uri req_uri = new Uri(uri_list[i]);
HttpBaseProtocolFilter filter = new HttpBaseProtocolFilter();
filter.ServerCredential = new PasswordCredential(req_uri.ToString(), "username", "password");
HttpCookieCollection cookiejar = filter.CookieManager.GetCookies(req_uri);
if (cookiejar.Count > 0)
{
foreach (HttpCookie cookie in cookiejar)
{
filter.CookieManager.SetCookie(cookie);
}
}
Windows.Web.Http.HttpClient client = new Windows.Web.Http.HttpClient(filter);
Windows.Web.Http.HttpRequestMessage http_req = new Windows.Web.Http.HttpRequestMessage();
http_req.Method = Windows.Web.Http.HttpMethod.Get;
http_req.RequestUri = req_uri;
var clientResponse = client.GetAsync(req_uri);
webView.NavigateWithHttpRequestMessage(http_req);
http_req.Dispose();
client.Dispose();
答案 0 :(得分:2)
您可以使用 for (int i = 0; i < readString.Length; i = i + 4)
{
//Decryption
switch (readString.Substring(i, 4))
{
case "8024":
decryptedString = decryptedString + "\n";
break;
}
}
inputTextBox.Text = decryptedString;
,这样您就可以使用NavigateWithHttpRequestMessage
导航到某个页面了。
您仍然需要使用HttpRequestMessage
进行带外身份验证,获取Cookie和身份验证标头,然后在构建HttpClient
时使用它们。
Here是一个应该有帮助的StackOverflow
答案 1 :(得分:-2)
如果您的远程Web服务器支持HTTP Basic身份验证,您可以像这样传递URL中的凭据:
https://Username:Password@www.example.com/index.html