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

如何在TypeScript中通过SSDP发送HTTP请求?遇404及localhost追加问题

解决Roku SSDP/HTTP GET获取设备列表的404与localhost追加问题

我来帮你一步步排查这个问题,之前做Roku设备控制的时候也踩过类似的坑,咱们从几个关键方向入手:

1. 先搞定SSDP响应的地址解析问题

你遇到的请求串被追加localhost,大概率是代码里处理SSDP返回的LOCATION头时出了问题。Roku设备在SSDP响应里会直接给你完整的设备描述URL,比如http://192.168.x.x:8060/device-description.xml,你要做的就是直接用这个完整URL发GET请求,绝对不要手动把localhost和路径拼在一起。

检查下你的代码是不是误写了字符串拼接逻辑,比如写成了"http://localhost" + location_path,这会导致请求地址变成http://localhost/http://192.168.x.x:8060/...这种完全无效的地址,自然返回404。

2. 验证GET请求的路径和端口是否正确

Roku的设备描述接口路径是固定的/device-description.xml,端口默认是8060,这俩错一个都会404。你可以先绕开代码,手动测试:在同一局域网的浏览器里输入http://[你的Roku设备IP]:8060/device-description.xml,如果能看到XML格式的设备信息,说明地址没问题;如果浏览器也返回404,那大概率是Roku的外部控制权限没开。

3. 确认Roku设备的外部控制API已启用

Roku默认可能限制了外部设备的控制访问,这会导致即使地址正确也返回404:

  • 打开Roku的设置菜单:依次进入Settings > System > Advanced system settings > Control by mobile apps > Network access
  • 把权限设置为Default或者Permissive(允许同一局域网的设备访问),然后重启Roku设备再试。

4. 检查SSDP搜索报文是否标准

如果SSDP搜索本身没拿到正确的Roku响应,后续的GET请求肯定会出错。标准的Roku SSDP搜索需要发送UDP报文到239.255.255.250:1900,报文内容要准确:

M-SEARCH * HTTP/1.1
HOST: 239.255.255.250:1900
MAN: "ssdp:discover"
MX: 3
ST: roku:ecp

重点注意ST字段是roku:ecp,不要用成其他服务类型,不然搜不到Roku设备,只能拿到无效的地址。

5. 排查代码里的URL处理逻辑

如果是用了框架或者自定义工具函数处理URL,可能会自动追加localhost。比如在Python里用urljoin的时候,要是不小心把基础URL设成了localhost,就会把路径拼错:

# 错误示例:会把路径拼接到localhost后面
wrong_url = urljoin("http://localhost", "/device-description.xml")
# 正确示例:直接用SSDP返回的完整LOCATION URL
correct_url = "http://192.168.1.100:8060/device-description.xml"

检查下你的代码有没有这类自动修改URL的逻辑,把它去掉就行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:36:48