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

已通过HTTP认证,如何建立WebSocket连接获取实时数据?

问题:WebSocket连接与实时数据获取问题

我需要连接WebSocket处理实时数据,目标地址是https://testsite.test.de/Interfaces。在Firefox中访问该地址时,会立刻弹出用户名密码验证框,输入正确信息后,先返回HTTP/1.1 200、HTTP/2 200状态码,随后触发101协议切换,Scheme转为wss://。

我用以下requests代码携带认证信息和User-Agent头请求该地址,能得到200状态码,但print(r.cookie)输出为空:

import requests

headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0'}

r = requests.get('https://testsite.test.de/Interfaces', 
                 auth=('my_username', 'my_password'), headers=headers)
print(r)

我不知道后续该怎么获取数据,尝试了以下websocket代码但没有任何结果:

import websocket

ws = websocket.WebSocketApp('wss://testsite.test.de/Interfaces')
ws.run_forever

浏览器Inspector截图:
浏览器网络请求截图


解决方案

1. 处理WebSocket的基础认证

你遇到的是HTTP基础认证,浏览器会自动把用户名密码转为Base64编码放在Authorization头里。直接用websocket库连接时,需要手动添加这个认证头,或者利用库的参数传递认证信息。

方法一:手动构造Authorization头

先把用户名和密码做Base64编码:

import base64
import websocket

# 构造基础认证头
username = 'my_username'
password = 'my_password'
auth_str = f"{username}:{password}"
auth_bytes = auth_str.encode('utf-8')
auth_base64 = base64.b64encode(auth_bytes).decode('utf-8')

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0',
    'Authorization': f'Basic {auth_base64}'
}

# 初始化WebSocketApp并添加回调处理数据
def on_message(ws, message):
    print("收到实时数据:", message)

def on_error(ws, error):
    print("错误:", error)

def on_close(ws, close_status_code, close_msg):
    print("连接关闭")

def on_open(ws):
    print("连接成功,等待接收数据")

ws = websocket.WebSocketApp(
    'wss://testsite.test.de/Interfaces',
    header=headers,
    on_message=on_message,
    on_error=on_error,
    on_close=on_close
)
ws.on_open = on_open

# 启动连接(注意要加括号调用run_forever)
ws.run_forever()

方法二:使用websocket库的auth参数

部分websocket库版本支持直接传递auth参数,简化代码:

import websocket

def on_message(ws, message):
    print("收到实时数据:", message)

ws = websocket.WebSocketApp(
    'wss://testsite.test.de/Interfaces',
    auth=('my_username', 'my_password'),
    header={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0'},
    on_message=on_message
)

ws.run_forever()

2. 关键注意点

  • 你之前的ws.run_forever少了括号,应该是ws.run_forever(),否则不会启动连接。
  • 浏览器的101协议切换是WebSocket握手的正常流程,不需要手动处理,websocket库会自动完成握手。
  • requests请求返回200但无Cookie,说明该接口的认证不需要依赖Cookie,直接通过Authorization头维持即可,所以WebSocket连接时只要带上正确的认证头就能正常通信。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 10:55:07