海康摄像头GB28281项目接入云台控制代码

 private readonly HttpClient client;
        public HomeController()
        {
            client = new HttpClient(new HttpClientHandler() { UseCookies = false });
        }
        public ActionResult Index()
        {
            string ua = Request.UserAgent;
            ViewBag.Chrome = ua.ToLower().Contains("chrome").ToString().ToLower();
            //HttpClient client = new HttpClient();
            //HttpRequestMessage requestMessage = new HttpRequestMessage();
            //requestMessage.Method = HttpMethod.Get;
            //requestMessage.RequestUri = new Uri("http://47.119.182.236:18085/api/user/login?password=dee9b0cb41f198098660a373b9d764ca&username=admin");
            //HttpResponseMessage responseMessage= client.SendAsync(requestMessage).Result;
            //responseMessage.Headers["cookei"]
            try
            {
                HttpWebRequest webRequest = (HttpWebRequest)WebRequest.CreateHttp("http://xxxxx/api/user/login?password=dee9b0cb41f198098660a373b9d764ca&username=admin");
                webRequest.Method = "get";
                webRequest.CookieContainer = new CookieContainer();
                HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
                var cookie = webResponse.Cookies;
                StreamReader reader = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8);
                string result = reader.ReadToEnd();
                Response.Cookies.Add(new HttpCookie(cookie[0].Name, cookie[0].Value));
                Response.Cookies.Add(new HttpCookie("session", System.Web.HttpUtility.UrlEncode("{\"username\":\"admin\"}")));
            }
            catch (Exception ex)
            {
            }
            return View();
        }
        public ActionResult CameraControl(string cameraNo, string channelNo, string command)
        {
            //HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = false });
            HttpRequestMessage requestMessage = new HttpRequestMessage();
            requestMessage.Method = HttpMethod.Post;
            requestMessage.RequestUri = new Uri($"http://xxxxx/api/ptz/control/{cameraNo}/{channelNo}?command={command}&horizonSpeed=255&verticalSpeed=255&zoomSpeed=255");
            requestMessage.Headers.Add("Cookie", $"JSESSIONID={Request.Cookies["JSESSIONID"].Value};session={Request.Cookies["session"].Value}");
            //requestMessage.Headers.Add("ContentType", "application/x-www-form-urlencoded");
            //requestMessage.Content = new StringContent($"command={command}&horizonSpeed=255&verticalSpeed=255&zoomSpeed=255");
            HttpResponseMessage responseMessage = client.SendAsync(requestMessage).Result;
            if (responseMessage.IsSuccessStatusCode)
            {
                string result = responseMessage.Content.ReadAsStringAsync().Result;
                return Json(new { status = 0, code = responseMessage.StatusCode, msg = result }, JsonRequestBehavior.AllowGet);
            }
            else
            {
                return Json(new { status = 500, code = responseMessage.StatusCode, msg = responseMessage.Content.ReadAsStringAsync().Result }, JsonRequestBehavior.AllowGet);
            }
        }

主要是要后台模拟请求登录,获取返回的cookie,再携带cookie请求云台控制接口;

注意:

webRequest.CookieContainer = new CookieContainer();

必须要上面这段代码,不然不会获取到返回来的cookie

10 0