From 091de223b212a584675f61a82d3304a0218e0b07 Mon Sep 17 00:00:00 2001 From: kumold Date: Tue, 17 Oct 2023 14:31:11 +0600 Subject: [PATCH 1/2] Update RequestInspectorJavaScriptInterface.kt Fix finding a request; optimization of saving requests. --- .../RequestInspectorJavaScriptInterface.kt | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/acsbendi/requestinspectorwebview/RequestInspectorJavaScriptInterface.kt b/app/src/main/java/com/acsbendi/requestinspectorwebview/RequestInspectorJavaScriptInterface.kt index 5255074..92de103 100644 --- a/app/src/main/java/com/acsbendi/requestinspectorwebview/RequestInspectorJavaScriptInterface.kt +++ b/app/src/main/java/com/acsbendi/requestinspectorwebview/RequestInspectorJavaScriptInterface.kt @@ -9,6 +9,7 @@ import org.json.JSONObject import java.net.URLEncoder import java.util.Locale + internal class RequestInspectorJavaScriptInterface(webView: WebView) { init { @@ -17,10 +18,10 @@ internal class RequestInspectorJavaScriptInterface(webView: WebView) { private val recordedRequests = ArrayList() - fun findRecordedRequestForUrl(url: String): RecordedRequest? { + fun findRecordedRequestForUrl(url: String, method: String): RecordedRequest? { return synchronized(recordedRequests) { recordedRequests.find { recordedRequest -> - url.contains(recordedRequest.url) + url == recordedRequest.url && method == recordedRequest.method } } } @@ -34,7 +35,20 @@ internal class RequestInspectorJavaScriptInterface(webView: WebView) { val headers: Map, val trace: String, val enctype: String? - ) + ) { + override fun equals(other: Any?): Boolean { + if (other !is RecordedRequest) return super.equals(other) + return url == other.url + && method == other.method + && body == other.body + && headers == other.headers + && formParameters == other.formParameters + } + + override fun hashCode(): Int { + return super.hashCode() + } + } @JavascriptInterface fun recordFormSubmission( @@ -124,7 +138,8 @@ internal class RequestInspectorJavaScriptInterface(webView: WebView) { private fun addRecordedRequest(recordedRequest: RecordedRequest) { synchronized(recordedRequests) { - recordedRequests.add(recordedRequest) + if (!recordedRequests.equals(recordedRequest)) + recordedRequests.add(recordedRequest) } } @@ -293,7 +308,7 @@ XMLHttpRequest.prototype.send = function (body) { window._fetch = window.fetch; window.fetch = function () { - const url = arguments[1] && 'url' in arguments[1] ? arguments[1]['url'] : "/"; + const url = arguments[0]; const fullUrl = getFullUrl(url); const method = arguments[1] && 'method' in arguments[1] ? arguments[1]['method'] : "GET"; const body = arguments[1] && 'body' in arguments[1] ? arguments[1]['body'] : ""; From ac46fa0d25c9ff7301212b972daf49f647c27ab2 Mon Sep 17 00:00:00 2001 From: kumold Date: Tue, 17 Oct 2023 14:36:32 +0600 Subject: [PATCH 2/2] Update RequestInspectorWebViewClient.kt Add method to get recorded request --- .../requestinspectorwebview/RequestInspectorWebViewClient.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/acsbendi/requestinspectorwebview/RequestInspectorWebViewClient.kt b/app/src/main/java/com/acsbendi/requestinspectorwebview/RequestInspectorWebViewClient.kt index 3b895fe..07b8fea 100644 --- a/app/src/main/java/com/acsbendi/requestinspectorwebview/RequestInspectorWebViewClient.kt +++ b/app/src/main/java/com/acsbendi/requestinspectorwebview/RequestInspectorWebViewClient.kt @@ -27,7 +27,8 @@ open class RequestInspectorWebViewClient @JvmOverloads constructor( request: WebResourceRequest ): WebResourceResponse? { val recordedRequest = interceptionJavascriptInterface.findRecordedRequestForUrl( - request.url.toString() + request.url.toString(), + request.method, ) val webViewRequest = WebViewRequest.create(request, recordedRequest) return shouldInterceptRequest(view, webViewRequest)