You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python与Blazor Server建立HTTP请求交互?

用Python与Blazor Server交互的实现方法

可以通过模拟Blazor Server底层依赖的SignalR通信协议来实现Python脚本与Blazor服务器的交互,核心是复现SignalR的连接协商、消息构造和请求发送流程,具体步骤如下:

1. 完成SignalR协商,获取连接凭证

首先发送协商请求,获取后续通信所需的connectionId和connectionToken:

import requests

session = requests.Session()
# 若站点需要身份验证,先模拟登录并保留Cookie(示例需替换实际登录逻辑)
# session.post("http://the-website.com/account/login", data={"username": "your-user", "password": "your-pass"})

# 发送协商请求
negotiate_url = "http://the-website.com/_blazor/negotiate?negotiateVersion=1"
negotiate_res = session.get(negotiate_url)
negotiate_data = negotiate_res.json()

connection_id = negotiate_data["connectionId"]
connection_token = negotiate_data["connectionToken"]

2. 选择传输方式,构造通信URL

从协商返回的availableTransports中选择适合Python模拟的传输方式,推荐LongPolling(无需持续连接,更易模拟):

long_poll_url = f"http://the-website.com/_blazor?id={connection_id}&connectionToken={connection_token}"

3. 构造Blazor方法调用的SignalR消息

Blazor通过SignalR发送的调用消息遵循固定格式,核心字段说明:

  • type: 1表示调用方法,2表示调用成功,3表示调用错误
  • invocationId: 自增的唯一标识(可从0开始)
  • target: 要调用的Blazor方法全名(需包含命名空间和类名,如Pages.Home.SubmitForm)
  • arguments: 方法所需的参数数组

示例构造调用消息:

import json

# 替换为实际要调用的Blazor方法和参数
target_method = "Pages.Counter.IncrementCount"
method_args = []

signalr_message = {
    "type": 1,
    "invocationId": "0",
    "target": target_method,
    "arguments": method_args
}

4. 发送请求并解析响应

将构造好的消息以JSON形式发送到LongPolling URL,并解析服务器返回的SignalR响应:

headers = {
    "Content-Type": "application/json",
    "Accept": "text/plain, */*"
}

# 发送调用请求
response = session.post(long_poll_url, headers=headers, data=json.dumps(signalr_message))

# 解析响应(服务器可能返回多条消息,以换行分隔)
for line in response.text.splitlines():
    if not line:
        continue
    msg = json.loads(line)
    if msg["type"] == 2:
        print(f"方法调用成功,返回结果: {msg.get('result')}")
    elif msg["type"] == 3:
        print(f"方法调用失败,错误信息: {msg.get('error')}")

关键注意事项

  • 方法名准确性: 必须确认Blazor组件中方法的完整名称(可通过浏览器调试工具查看Blazor日志或反编译DLL获取)
  • 身份验证: 若站点需要登录,需先完成登录流程并保留会话Cookie,所有后续请求使用同一个requests.Session实例
  • 二进制消息处理: 若遇到二进制格式的SignalR消息,可使用Python的signalr-client库简化解析(手动解析需遵循SignalR的二进制协议规范)

内容的提问来源于stack exchange,提问作者Amir Nosshinfar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 12:35:14