如何从需要身份验证的URL检索文件?

问题描述 投票:0回答:2

我正在Unity中制作一个工具来从服务器检索数据。服务器的界面可以提供URL,我们稍后可以单击这些URL,以返回XML或CSV文件以及来自该服务器的查询结果。但是,它需要基本身份验证。单击链接时,它只是弹出一个登录屏幕,然后才给我结果。如果我尝试[思考]我在Unity中知道的内容(从WebRequest.GetResponse()开始),它只会失败并说我无权。它不显示用于身份验证的弹出窗口。那么,如何在使用Unity访问时让该登录弹出窗口出现,并等待登录结果以获取文件?还是有某种标准化的方法可以在链接本身中提供该信息?

c# unity3d authentication url
2个回答
0
投票
//try just in case something went wrong whith calling the api try { //Use using so that if the code end the client disposes it self using (HttpClient client = new HttpClient()) { //Setup authentication information string yourusername = "username"; string yourpwd = "password"; //this is when you expect json to return from the api client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); //add the authentication to the request client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String( System.Text.ASCIIEncoding.ASCII.GetBytes($"{yourusername}:{yourpwd}"))); //api link used to make the call var requestLink = $"apiLink"; using (HttpResponseMessage response = client.GetAsync(requestLink).Result) { //Make sure the request was successfull before proceding response.EnsureSuccessStatusCode(); //Get response from website and convert to a string string responseBody = response.Content.ReadAsStringAsync().Result; //now you have the results } } } //Catch the exception if something went from and show it! catch (Exception) { throw; }

0
投票
String username = "Superman"; // Obviously handled secretly String pw = "ILoveLex4evar!"; // Obviously handled secretly String url = "https://www.SuperSecretServer.com/123&stuff=?uhh"; String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + pw)); CookieContainer myContainer = new CookieContainer(); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Headers.Add("Authorization", "Basic " + encoded); try { using (WebResponse response = request.GetResponse()) { using (Stream responseStream = response.GetResponseStream()) { using (FileStream xml = File.Create("filepath/filename.xml")) { byte[] buffer = new byte[BufferSize]; int read; while ((read = responseStream.Read(buffer, 0, buffer.Length)) > 0) { xml.Write(buffer, 0, read); } } } } }
© www.soinside.com 2019 - 2024. All rights reserved.