跳到主要内容

get_endpoints

前置 / 配套

签名

@staticmethod
def get_endpoints(endpoint_url: str,
timeout_ms: int = 10_000) -> List[EndpointDescription]: ...

通过临时 SecureChannel (None mode) 连服务端, 拉 Endpoint 列表后立即断开. 不需要 Session.

EndpointDescription 字段

字段类型说明
endpoint_urlOptional[str]实际 endpoint URL
security_modeMessageSecurityModeNONE / Sign / SignAndEncrypt
security_policy_uriOptional[str]算法套件 URI
server_application_uriOptional[str]Server 应用 URI
server_product_uriOptional[str]Server 产品 URI
server_application_nameOptional[str]Server 应用名
server_application_typeint0=Server / 1=Client / 2=ClientAndServer / 3=DiscoveryServer
server_certificateOptional[bytes]服务端证书 (DER)
transport_profile_uriOptional[str]传输 Profile (通常 UA-TCP)
security_levelint服务端推荐优先级
user_tokensList[UserTokenPolicy]支持的登录方式

UserTokenPolicy 字段

字段类型说明
policy_idOptional[str]服务端给的 ID, 客户端激活时传回
token_typeUserTokenTypeAnonymous / Username / Certificate / Issued

用法

from darra_opcua import OpcUaDiscovery

endpoints = OpcUaDiscovery.get_endpoints("opc.tcp://server:4840")

print(f"Server has {len(endpoints)} endpoints:")
for ep in endpoints:
print(f"\n URL: {ep.endpoint_url}")
print(f" Mode: {ep.security_mode.name}")
print(f" Policy: {ep.security_policy_uri}")
print(f" Tokens:")
for t in ep.user_tokens:
print(f" - {t.token_type.name} (policy_id={t.policy_id})")

典型输出

Server has 4 endpoints:

URL: opc.tcp://server:4840
Mode: NONE
Policy: http://opcfoundation.org/UA/SecurityPolicy#None
Tokens:
- Anonymous

URL: opc.tcp://server:4840
Mode: Sign
Policy: http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256
Tokens:
- Anonymous
- Username

URL: opc.tcp://server:4840
Mode: SignAndEncrypt
Policy: http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256
Tokens:
- Username
- Certificate

服务端通常暴露多个组合 (NONE / Sign / SignAndEncrypt × Anonymous / Username / Certificate), 客户端按需求挑.


异常

异常含义
ValueError("endpoint_url is required")URL 为空
OpcUaException(BadCommunicationError)网络 / 服务端不可达
OpcUaException(BadServiceUnsupported)服务端不支持 Discovery (罕见)

下一步