我对http请求完全是初学者,但我想编写一个python应用程序,它使用Sony's API来控制wi-fi摄像头。目前,我只是想和摄像机谈谈,但我的get请求一直失败。我有所有的文档(upnp文档、ssdp文档、用户手册等),但我认为我遗漏了一些非常基本的东西。据索尼的医生说,我需要:
作为接入点连接到相机(例如,像任何其他Wi-Fi路由器一样登录)
向某个url和端口发送请求
有人知道这里出了什么问题吗?关于开始使用upnp/ssdp有什么好的资源吗?我从here获得了discovery_msg字符串的格式。

#!/usr/bin/python

def main():
    import requests

    DISCOVERY_MSG = ('M-SEARCH * HTTP/1.1\r\n' +
                 'HOST: 239.255.255.250:1900\r\n' +
                 'MAN: "ssdp:discover"\r\n' +
                 'MX: 3\r\n' +
                 'ST: urn:schemas-sony-com:service:ScalarWebAPI:1\r\n' +
                 'USER-AGENT: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/536.30.1 (KHTML, like Gecko) Version/6.0.5 Safari/536.30.1\r\n\r\n')

    try:
        r = requests.get(DISCOVERY_MSG)
    except:
        print('Didn\'t work')


if __name__ == '__main__':
  main()

最佳答案

我认为这与upnp没什么关系:索尼只是碰巧使用ssdp进行发现,而事实上ssdp规范正好在upnp架构文档中。
至于问题:requests.get()在您应该发送udp多播消息并处理响应时执行普通的http get(或者如果您提供了正确的参数,则执行普通的http get)。
如果你真的打算自己做这件事,准备学习一点网络和了解ssdp协议(参见UPNP UDA part 1)。但我的建议是使用ssdp库或复制可工作的开源代码——这样你就可以专注于提供新的东西(比如索尼协议的实现)。

09-26 06:14