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进行反向工程,等等。 (仔细阅读!)
答
我意识到这是一个古老的问题,但它出现在谷歌,所以我想我会发布我为后代找到的解决方案。
根据索尼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调用。我花了很长时间尝试 来解决这个问题,所以我希望它能帮助别人。
正是我非常想要与之交互的API,并且在API的docomentation中,它将内容称为应用程序/ json,因为我已经使用过,因此问题还有什么,可能很愚蠢,做过了吗? –
@PeterJ - 我建议你要么使用Java,要么联系索尼,并要求他们提供建议。 –
该评论引起了一些争议22情况:)索尼开发者网站依靠*作为他们的支持渠道。也许索尼的某个人最终会读到这个对话并提出一个答案。 –