2015-08-05 4 views
1

Мне нужно загрузить данные с сервера REST и заполнить таблицы в SQL. Поэтому я работаю, используя тестовый серверный сервер REST, который использует ключ API. Код ниже.JSON с базовой аутентификацией вместо ключа API

var url = "https://openexchangerates.org/api/latest.json?app_id=a28cb70b31404429bea46b0889ec6697";

 var currencyRates = CCAP_JSON_Downloader.CCAP._download_serialized_json_data<CurrencyRates>(url); 
     // Console.Write(); 



public class CCAP 
    { 
     public static T _download_serialized_json_data<T>(string url) where T : new() { 
    using (var w = new WebClient()) { 
    var json_data = string.Empty; 
    SqlConnection DB_CONN_1990 = new SqlConnection(ConfigurationManager.ConnectionStrings["CCAP_JSON_Downloader.Properties.Settings.DB_CONN_1990"].ToString()); 
     DB_CONN_1990.Open(); 

    // attempt to download JSON data as a string 
     //for (int i = 0; i <= 9; i++) 
      try 
      { 
       json_data = w.DownloadString(url); 

       JsonTextReader reader = new JsonTextReader(new StringReader(json_data)); 
       while (reader.Read()) 
       { 
        Console.Read(); 

        if (reader.Value != null) 
        { 

         Console.WriteLine("CAPTURING" + "Path: {0}, Value: {1}", reader.Path, reader.Value); 
         var cmd = new SqlCommand("Insert_RAW_XML", DB_CONN_1990); 
         cmd.CommandType = CommandType.StoredProcedure; 
         cmd.Parameters.AddWithValue("@Token_Type", reader.Path); 
         cmd.Parameters.AddWithValue("@Value", reader.Value); 
         cmd.ExecuteNonQuery(); 
        } 
        else 
         Console.WriteLine("Token: {0}", reader.TokenType); 

Итак, теперь у меня есть доступ к серверу REST состояния, но они используют аутентификацию BASIC HTTP. КОД НИЖЕ

var webRequest = (HttpWebRequest)WebRequest.Create("https://wccarest.wicourts.gov:443/api/v1/counties?expand=all&api_key"); 
      webRequest.Method = "GET"; 
      webRequest.ContentType = "application/json"; 
      webRequest.UserAgent = "Mozilla/5.0 (Windows NT 5.1; rv:28.0) Gecko/20100101 Firefox/28.0"; 
      string autorization = "username" + ":" + "Password"; 
      byte[] binaryAuthorization = System.Text.Encoding.UTF8.GetBytes(autorization); 
      autorization = Convert.ToBase64String(binaryAuthorization); 
      autorization = "Basic " + autorization; 
      webRequest.Headers.Add("AUTHORIZATION", autorization); 
      var webResponse = (HttpWebResponse)webRequest.GetResponse(); 
      if (webResponse.StatusCode != HttpStatusCode.OK) Console.WriteLine("{0}", webResponse.Headers); 
      using (StreamReader reader = new StreamReader(webResponse.GetResponseStream())) 

      { 
      string s = reader.ReadToEnd(); 
      Console.WriteLine(s); 

      } 

Мой вопрос: мне нравится, как я работал раньше. где я могу только прокормить URL, var url = "https://openexchangerates.org/api/latest.json?app_id=a28cb70b31404429bea46b0889ec6697";

Но теперь я не могу понять, как получить полный URL с аутентификацией. У меня есть шифрование от пользователя и пароль. но, похоже, я могу передать только базовый URL, поэтому я всегда получаю неуполномоченную ошибку. Как я могу отправить URL с полными учетными данными, которые я могу передать классу CCAP. Первый раз работая с серверами REST и т. Д., Поэтому я открыт для любых других предложений или лучшего способа сделать это. Thanks Rudy

ответ

0

Попробуйте использовать специальный URL-адрес: http://username:[email protected]/ - это должно отправить учетные данные в стандартном HTTP-заголовке «Авторизация».

Например, https://username:[email protected]:443/api/v1/counties?expand=all&api_key

+0

Привет fl_int, спасибо за быстрый ответ. Я попробовал это. По-прежнему нет ошибки auth. – user3641694

Смежные вопросы