0

这本质上是Can not add account for custom Sonos service的副本,但没有可接受的答案,我无法添加评论以询问他们是否解决了他们的问题。

我继承了一个项目并正在尝试添加开发服务。我已经通过 /customsd.htm 对其进行了配置,将标头策略设置为 Session ID,让安全和不安全的端点都工作。

当我去添加频道时,我看到了对 strings.xml 的请求。但是,我从来没有看到任何请求进入 getSessionId。同时 SONOS 报告“未找到帐户。***** 服务器未识别您的登录信息。” 我可以使用 SoapUI 发出请求,并且得到有效响应。

如果值得一提,我在 SONOS 的 beta 程序中,并且在 6.2 版本中,构建 31926010(Mac 桌面应用程序)。

更新:

虽然我不确定这里有什么有用的,但查看日志[deviceIP]:1400/support/aggregate,我看到以下内容。请注意,编辑后的 ​​URL 和 IP 确实可以解析。IP 用于负载均衡器,URL 在它后面。

Feb 28 11:07:42 Sonos[84168] <![CDATA[<]]>Error<![CDATA[>]]>: (SCLib) dns(1): [redacted URL] -<![CDATA[>]]> [redacted IP]
Feb 28 11:07:42 Sonos[84168] <![CDATA[<]]>Error<![CDATA[>]]>: (SCLib) control_client(1): getSessionId failed, res = 1000, tvStart = 1456679262 s 250163 us, m_tvConnectDone = 1456679282 s 250162 us, m_tvDone = 1456679302 s 250162 us, tvNow = 1456679262 s 509982 us
Feb 28 11:07:42 Sonos[84168] <![CDATA[<]]>Error<![CDATA[>]]>: (SCLib) soap(1):  - param username = [redacted username]

更新#2:

我通过 Wireshark 检查了数据包,生产服务和开发服务的行为似乎相同,除了生产服务,控制器/我的计算机在服务器挂断之前启动了对 Sonos 的 POST 请求。所附图像中以红色标出的该过程不会发生在海关服务中。

GetSessionId 尝试的 Wireshark 输出

我还尝试在 customd 配置中使用生产服务端点,但该请求以同样的方式失败。FWIW,所有 ssl_validation 测试都通过了,各种内容测试也是如此。

4

1 回答 1

1

由于缺少斜杠...

我终于对它进行了排序,它非常小。在 customd 配置中,我的端点 url 没有尾部斜杠。添加它们使一切正常。

当我解密控制器为生产服务和注册到生产端点的海关服务对服务器所做的调用时,我终于意识到了这一点。海关服务发出的呼叫正在返回负载平衡器的 400 错误。调用之间的唯一区别是标题,特别是:

生产服务:POST / HTTP/1.1

开发服务:POST HTTP/1.1

LB 正确地表示呼叫无效。添加尾部斜杠使一切正常。

对于它的价值,我很确定没有尾部斜杠的 URL 既可以通过 curl 工作,也可以通过 SoapUI 工作。但是,Sonos 控制器需要它们。

于 2016-03-07T19:05:44.107 回答