Как получить файл с URL, который требует аутентификации? - PullRequest
0 голосов
/ 06 февраля 2020

Я создаю инструмент в Unity для извлечения данных с сервера. Интерфейс сервера может предоставлять URL-адреса, по которым мы можем позже щелкнуть, и которые вернут файл XML или CSV с результатами этого запроса с этого сервера. Но для этого требуется аутентификация Basi c. При нажатии на ссылки, он просто всплывает экран входа в систему, прежде чем дать мне результаты. Если я попробую то, что, как мне кажется, я знаю в Unity (начиная с WebRequest.GetResponse ()), он просто завершится неудачно и скажет, что я не авторизован. Это не показывает всплывающее окно для аутентификации. Итак, как я могу позволить этому всплывающему окну входа отображаться при доступе через Unity и ждать результатов входа, чтобы получить файл? Или есть какой-то стандартизированный способ предоставления этой информации в самой ссылке?

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

Это то, чем я закончил, посмотрев на комментарии выше. Дайте мне знать, если я делаю что-то ужасно неэффективное!

    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);
                    }
                }
            }
        }
    }
0 голосов
/ 06 февраля 2020

Вот код, который вы должны начать. Просто заполните ссылку запроса и имя пользователя, пароль. пожалуйста, посмотрите комментарии в коде, чтобы увидеть, что он делает.

//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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...