webview怎么获取拦截页面中的Post数据?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webview怎么获取拦截页面中的Post数据?相关的知识,希望对你有一定的参考价值。
webview怎么获取拦截页面中的Post数据?页面中点击某个按钮,这个按钮发起的事件带有Post数据,但是post数据不在URL中,请问在webview中怎么获取呢?
参考技术A 使用脚本来获取页面上的值回传到jandroid应用中UWP 拦截 Webview POST 请求并获取内容
【中文标题】UWP 拦截 Webview POST 请求并获取内容【英文标题】:UWP intercept Webview POST request and get the content 【发布时间】:2021-03-03 13:15:33 【问题描述】:使用 UWP/XAML,我试图通过处理 WebResourceRequested 来拦截 WebView 的 POST(表单和文件上传)请求并获取要保存的内容,但是 Content keep 在本地窗口中显示“
private void WebView_WebResourceRequested(WebView sender, WebViewWebResourceRequestedEventArgs args)
if (request.Method.Method == "POST")
HttpStreamContent content = (HttpStreamContent) args.request.Content;
var contentBuffer = content.ReadAsBufferAsync().GetResults();
byte[] buffer = contentBuffer.ToArray();
非常感谢。
【问题讨论】:
您是否尝试将帖子 uri 添加到 content uris。 我试图获取包含表单提交和上传文件内容的 html POST 请求的实际正文。它应该在带有要访问的流对象的 Content 属性中,但值始终为“UWP拦截Webview POST请求并获取内容
这是 WebView1 中的已知问题。
目前,我们提供了一种解决方法,使用ReadAsInputStreamAsync
获取请求内容并使用固定长度加载缓冲区。因为它是非搜索流。我对我们拥有的简单复制样本进行了成功测试。
private async void MyWebView_WebResourceRequested(WebView sender, WebViewWebResourceRequestedEventArgs args)
if (args.Request.Method.Method == "POST")
if (args.Request.Content != null)
var bodyStream = await args.Request.Content.ReadAsInputStreamAsync();
var buffer = new Windows.Storage.Streams.Buffer(4096);
await bodyStream.ReadAsync(buffer, 4096, Windows.Storage.Streams.InputStreamOptions.None);
var reader = Windows.Storage.Streams.DataReader.FromBuffer(buffer);
var len = reader.UnconsumedBufferLength;
var body = reader.ReadString(len);
Debug.WriteLine($"Body from POST request: body");
当然,只要我们为发布数据提供足够大的缓冲区,这段代码就可以工作。对于此示例,这里 4096 字节的缓冲区足以获取发布的整个数据。
【讨论】:
所以它可以作为输入流使用。我虽然它已经在缓冲区中发送了所有内容。谢谢。我很高兴它仍然受到管理,因此我不必等待 WebView2。 但它无法读取上传文件的内容。我想知道是否有任何解决方法。或者它首先没有被 HttpRequestMessage 覆盖。 @yosimadsu,是的,我知道,恐怕解决方法不能那样工作。您需要在调用 ReadAsync 之前正确调整缓冲区大小。 我已经尝试了很多方法来读取 http POST 多部分,但似乎这是 WebView 控件的限制。可能我确实需要等待 WebView2 并尝试同样的事情,或者我必须制作自己的 webview。谢谢。以上是关于webview怎么获取拦截页面中的Post数据?的主要内容,如果未能解决你的问题,请参考以下文章