如何拦截webview的post请求
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何拦截webview的post请求相关的知识,希望对你有一定的参考价值。
参考技术A [java] view plain copy print?WebView webView = (WebView) findViewById(R.id.web_view);
webView.setWebViewClient(new WebViewClient()
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
Toast.makeText(getApplicationContext(), "WebViewClient.shouldOverrideUrlLoading",
Toast.LENGTH_SHORT);
view.loadUrl(url);
return true;
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon)
Toast.makeText(getApplicationContext(), "WebViewClient.onPageStarted",
Toast.LENGTH_SHORT).show();
// 这儿可以截获网页的URL,可以对URL进行分析。
// 本例子之中是分析从通过RenRen登录成功后返回的access_token.
if (url.contains("graph.renren.com/oauth/login_success.html"))
int start = url.indexOf("access_token") + "access_token=".length();
int end = url.indexOf("expires_in") - 1;
accessToken = url.substring(start, end);
super.onPageStarted(view, url, favicon);
);
webView.loadUrl(myUrl);
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请求的主要内容,如果未能解决你的问题,请参考以下文章
Burp Suite如何拦截GET请求提交POET请求的参数