Flet WebView 请求方法 RequestMethod 详解:用 load_request 控制 GET 与 POST 加载
前端跨平台桌面应用移动开发【免费下载链接】fletBuild realtime web, mobile and desktop apps in Python only. No frontend experience required.项目地址https://gitcode.com/gh_mirrors/fl/flet点击查看免费下载RequestMethod是 Flet 官方扩展包flet-webview中定义的 HTTP 请求方法枚举用于在使用WebView.load_request()以编程方式发起页面加载时明确指定底层 HTTP 请求使用 GET 还是 POST 方法。本文以 requestmethod.md 对应的类文档为骨架结合 flet-webview 的 Python 与 Flutter 双层源码讲清该枚举的定义、用法、平台限制与底层映射使读者能够在 iOS、Android、macOS 应用中通过 Flet 代码精确控制 WebView 的页面加载请求。RequestMethodflet-webview 中的 HTTP 方法枚举RequestMethod是一个标准的 Pythonenum.Enum定义于 types.py其类文档原文为Defines the supported HTTP methods for loading a page in aWebView定义在WebView中加载页面所支持的 HTTP 方法。class RequestMethod(Enum): Defines the supported HTTP methods for loading a page in a WebView. GET get HTTP GET method. POST post HTTP POST method.当前版本仅包含两个成员枚举值value为小写字符串与 WebView 底层所需的请求方法标识保持一致成员枚举值说明RequestMethod.GETgetHTTP GET 方法加载页面时的默认值RequestMethod.POSTpostHTTP POST 方法适用于需要提交表单体request body的页面加载该枚举被flet-webview包作为公共 API 导出可从包顶层直接导入使用from flet_webview import RequestMethod其导出声明可见于 __init__.py与WebView控件、JavaScriptMode、LogLevelSeverity以及三个事件数据类一同列于__all__中。load_requestRequestMethod 的唯一消费方RequestMethod在实际代码中只被WebView.load_request()一个方法消费该方法定义于 webview.pyasync def load_request(self, url: str, method: RequestMethod RequestMethod.GET): Makes an HTTP request and loads the response in the webview. Args: url: The URL to load. A file:// URL is loaded as a local file, the same way :meth:load_file does. method: The HTTP method to use. Ignored for file:// URLs. Note: Works only on the following platforms: iOS, Android, and macOS. self._check_mobile_or_mac_platform() await self._invoke_method( load_request, arguments{url: url, method: method} )要点如下参数url要加载的 URL。若传入file://协议地址则按本地文件方式加载等价于调用load_file()此时method参数会被忽略参数method要使用的 HTTP 方法默认值为RequestMethod.GET类型即本文主角RequestMethod返回值None方法为异步async调用时需await平台限制仅支持 iOS、Android、macOS 三个平台方法入口处首先调用_check_mobile_or_mac_platform()webview.py做运行时校验在 Web 平台或 Linux、Windows 上调用会抛出ft.FletUnsupportedPlatformException。参数如何从 Python 传到 WebViewload_request()内部通过self._invoke_method(load_request, ...)将url与method两个参数序列化后发送给 Flutter 端。method传入的是RequestMethod枚举实例序列化后即为小写字符串get或post这与 Flutter 端webview_flutter包中LoadRequestMethod.get/LoadRequestMethod.post的命名天然对应。底层映射Python 枚举如何驱动 webview_flutter在 Flutter 侧flet-webview的 Android/iOS/macOS 实现位于 webview_mobile_and_mac.dart其中load_request的 invoke 分支L197-L203如下case load_request: var url args[url]; if (url ! null) { await _load(url, parseLoadRequestMethod(args[method], LoadRequestMethod.get)!); } break;字符串到 Dart 枚举的解析由工具函数parseLoadRequestMethod完成utils/webview.dart它基于 flet 框架通用的parseEnum将get/post解析为LoadRequestMethod枚举值解析失败时回退到LoadRequestMethod.getLoadRequestMethod? parseLoadRequestMethod(String? value, [LoadRequestMethod? defaultValue]) { return parseEnum(LoadRequestMethod.values, value, defaultValue); }真正发起请求的是内部_load()方法L39-L50Futurevoid _load(String url, LoadRequestMethod method) async { var uri Uri.parse(url); if (uri.scheme file) { try { await controller.loadFile(uri.toFilePath()); return; } on UnsupportedError catch (e) { debugPrint(WebView: $url is not a valid local file path: $e); } } await controller.loadRequest(uri, method: method); }这段源码揭示了两条关键行为file://优先走loadFile源码注释明确指出file://地址必须经由WebViewController.loadFile才能获得平台本地文件访问权限——Android 端需要切换默认关闭的WebSettings.allowFileAccessiOS/macOS 端需要loadFileURL:allowingReadAccessToURL:才能让同目录下的脚本、样式、图片等资源一并可读直接对file://地址执行loadRequest在 Android 上会报net::ERR_ACCESS_DENIED。这正是 Python 端 docstring 中method 参数对file://URL 被忽略的底层原因http(s)://直接透传方法非file://的地址会原样调用controller.loadRequest(uri, method: method)即webview_flutter底层的WebViewController.loadRequest将 GET/POST 方法语义完整传递到系统 WebView。初始加载时 method 的默认处理RequestMethod不仅用于load_request()动态调用控件首次挂载加载url属性时也会解析method属性并决定初始加载方式。在initState()中L139-L142controller.setJavaScriptMode(JavaScriptMode.unrestricted).then((_) _load( widget.control.getString(url, https://flet.dev)!, parseLoadRequestMethod( widget.control.getString(method), LoadRequestMethod.get)!));可以看到默认 URL 为https://flet.dev默认方法为LoadRequestMethod.get与 Python 侧load_request的默认参数保持一致。实战示例在 Flet 应用中使用 RequestMethod安装依赖flet-webview是独立的扩展包需要单独安装参考 flet-webview/README.md# 使用 uv uv add flet-webview # 或使用 pip之后需手动将包加入 requirements.txt 或 pyproject.toml pip install flet-webview基础用法加载页面并监听生命周期事件仓库自带的官方示例位于 web_view/main.py展示了WebView的基本用法。在此基础上配合load_request即可用指定 HTTP 方法加载页面import flet as ft import flet_webview as fwv from flet_webview import RequestMethod async def load_with_method(webview: fwv.WebView): # 使用 GET 方法加载默认方法可省略 await webview.load_request(https://example.com/page, methodRequestMethod.GET) # 使用 POST 方法加载适合提交表单类页面 await webview.load_request( https://example.com/search, methodRequestMethod.POST ) def main(page: ft.Page): def on_page_started(e): page.add(ft.Text(f加载开始{e.data})) webview fwv.WebView( urlhttps://flet.dev, on_page_startedon_page_started, expandTrue, ) page.add(ft.SafeArea(expandTrue, contentwebview)) page.run_task(load_with_method, webview) if __name__ __main__: ft.run(main)注意load_request是异步方法需在async函数中await调用且仅当应用运行在 iOS、Android、macOS 上时才有效请配合page.platform判断或直接在目标平台验证。加载本地文件method 被忽略await webview.load_request(file:///path/to/local/page.html)传入file://地址时无论method参数取值如何都会被忽略WebView 会以本地文件方式加载并使其同目录资源可读。该行为与直接调用WebView.load_file()webview.py等价。平台支持与边界注意事项flet-webview的官方平台支持矩阵见 flet-webview/README.md 与 WebView 文档平台WindowsmacOSLinuxiOSAndroidWeb支持❌✅❌✅✅✅但需要区分两点控件整体可用于 macOS、iOS、Android 与 Webload_request以及大部分方法调用仅支持 iOS、Android、macOSWeb 平台虽然能显示WebView但调用load_request会触发_check_mobile_or_mac_platform()抛出的FletUnsupportedPlatformException。另外在 Android 上访问明文 HTTP 地址时系统会默认拦截并报NET::ERR_CLEARTEXT_NOT_PERMITTED错误。若确需访问非 HTTPS 页面需要在应用构建配置中开启明文流量许可例如在pyproject.toml中写入详见 WebView 文档的 Troubleshooting 章节[tool.flet.android.manifest_application] usesCleartextTraffic true与其他加载方式的关系RequestMethod服务于按需发起 HTTP 请求这一场景与WebView的其他加载入口分工明确加载方式适用场景是否支持自定义 HTTP 方法url属性构造时指定控件挂载后自动加载初始页面可间接通过method属性指定默认 GETload_request(url, method)运行时以指定方法加载http(s)://或本地文件支持即本文的RequestMethodload_file(path)加载本地 HTML 文件不适用本地文件无 HTTP 方法语义load_html(value, base_url)直接渲染 HTML 字符串不适用见 webview.py小结RequestMethod虽仅有两个枚举成员却是flet-webview中以指定 HTTP 方法加载页面这一能力的类型化入口Python 侧负责 API 语义types.py经load_request()序列化后由 Flutter 侧parseLoadRequestMethod解析utils/webview.dart最终映射到webview_flutter的WebViewController.loadRequestwebview_mobile_and_mac.dart。掌握这一调用链即可在 iOS、Android、macOS 的 Flet 应用中精确控制 WebView 的请求方法同时规避file://与明文流量等边界陷阱。赞分享前端跨平台桌面应用移动开发【免费下载链接】fletBuild realtime web, mobile and desktop apps in Python only. No frontend experience required.项目地址https://gitcode.com/gh_mirrors/fl/flet点击查看免费下载相关推荐HTTP请求方法配置Blackbox Exporter的GET/POST/PUT请求实现HTTP请求方法配置Blackbox Exporter的GET/POST/PUT请求实现 在监控Web服务时不同HTTP请求方法如GET、POST、PUT可观测性网络Cangjie-SIG/fountain请求方法RequestMethod HTTP方法Cangjie SIG/fountain请求方法RequestMethod HTTP方法 还在为HTTP请求方法的管理而烦恼fountain框架的Reque后端Web框架TripoSR 单图像3D重建实战指南3条命令从照片到网格模型TripoSR 单图像3D重建实战指南3条命令从照片到网格模型 把一张照片丢进去就能拿到可直接导入下游软件的3D网格模型——这是开源单图像3D重建项目 Tr人工智能深度学习计算机视觉媒体生成图形学创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考