HTTP/1.1 415尝试在C#中使用Sony Camera Remote API时不支持媒体类型?

HTTP/1.1 415尝试在C#中使用Sony Camera Remote API时不支持媒体类型?

问题描述:

我写了一个小小的C#程序来测试与我的QX100的通信,但无法让它工作。关于为什么我获得不受支持的媒体类型的任何建议? 以下是来自Fiddler的代码和一些跟踪数据。HTTP/1.1 415尝试在C#中使用Sony Camera Remote API时不支持媒体类型?

谢谢!

代码:

 var httpWebRequest = (HttpWebRequest)WebRequest.Create("mylink"); 
     httpWebRequest.ContentType = "application/json"; 
     httpWebRequest.Method = "POST"; 
     using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) 
     { 
      string json = "{\"method\": \"getAvailableApiList\",\"params\": [],\"id\": 1,\"version\": \"1.0\"}"; 
      streamWriter.Write(json); 
      streamWriter.Flush(); 
      streamWriter.Close(); 

      var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
      using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
      { 
       var result = streamReader.ReadToEnd(); 
       Console.WriteLine("httpResponse: " + result.ToString()); 
      } 
      Console.ReadLine(); 
     } 

后追踪:

POST myLink HTTP/1.1 
Content-Type: application/json 
Host: 10.0.0.1:64321 
Content-Length: 71 
Expect: 100-continue 
Connection: Keep-Alive 

{"method": "getAvailableApiList","params": [],"id": 1,"version": "1.0"} 

Respons追踪:

HTTP/1.1 415 Unsupported Media Type 
    Connection: close 
    Date: Wed, 26 Mar 2014 07:45:13 GMT 
    Server: UPnP/1.0 SonyImagingDevice/1.0 
    X-AV-Server-Info: av=5.0; hn=""; cn="Sony Corporation"; mn="SonyImagingDevice"; mv="1.0"; 
    X-AV-Physical-Unit-Info: pa=""; pl=; 

这状态代码意味着你发送一个请求到设备与内容类型它没有想到,或不明白。

问题是,似乎没有任何直接使用索尼相机的文档,所以它不是什么你应该发送。但有一个选择。索尼已经为Java相机API提供了一个SDK。您可以从this page下载SDK。

对于试图使用C#访问摄像头的人来说,这并没有太大帮助,并且请注意,SDK的点击通过许可证要求您不要对SDK进行反向工程,等等。 (仔细阅读!)

+0

正是我非常想要与之交互的API,并且在API的docomentation中,它将内容称为应用程序/ json,因为我已经使用过,因此问题还有什么,可能很愚蠢,做过了吗? –

+0

@PeterJ - 我建议你要么使用Java,要么联系索尼,并要求他们提供建议。 –

+0

该评论引起了一些争议22情况:)索尼开发者网站依靠*作为他们的支持渠道。也许索尼的某个人最终会读到这个对话并提出一个答案。 –

我意识到这是一个古老的问题,但它出现在谷歌,所以我想我会发布我为后代找到的解决方案。

根据索尼API参考和此post ,摄像机不侦听该端口上的API调用。这是用于API描述文件的SSDP响应和GET请求的端口。如果您发送此GET请求,

GET /DmsRmtDesc.xml HTTP/1.1 
Host: 10.0.0.1 
Accept: */* 
Connection: close 

那么你会发现API返回的XML文件,该行

<av:X_ScalarWebAPI_ActionList_URL>http://10.0.0.1:10000/sony</av:X_ScalarWebAPI_ActionList_URL> 

所有POST请求需要被发送到IP和端口,对我来说那是10000. 415响应是正确的,因为该端口不执行API调用。我花了很长时间尝试 来解决这个问题,所以我希望它能帮助别人。