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 属性中,但值始终为“”。 【参考方案1】:

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数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何拦截webview的post请求

从 Android Webview 获取 POST 数据

如何从 Xamarin Forms 中的 webview 拦截“重定向 URL”

ios webview 怎么监听事件

重定向问题

jquery中的,$.post(),方法发送后,怎么获取数据?