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