2017-01-10 4 views
1

API를 사용하여 JSON 문자열을 가져 오려고했습니다. 나는 HttpWebResponseWebRequest을 시도했다. 하지만 두 가지 방법 모두 예외가 발생했습니다 The remote server returned an error: (401) Unauthorized.이 예외는 사용자 이름과 암호 일 수 있습니다. 하지만 정확한 신임장을 사용 했어. 내가 실수 한 곳을 모르겠다.C# 콘솔 응용 프로그램에서 API를 사용하여 JSON 가져 오기

내 코드입니다 : 내가 실수를했다

string URL = @"http://abc.company.com/api/v3/users?per_page=100&page=1"; 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL); 
request.ContentType = "application/json; charset=utf-8"; 
request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("userName:passWord")); 
request.PreAuthenticate = true; 
HttpWebResponse response = request.GetResponse() as HttpWebResponse; 
using (Stream responseStream = response.GetResponseStream()) 
{ 
    StreamReader reader = new StreamReader(responseStream, Encoding.UTF8); 
    Console.WriteLine(reader.ReadToEnd()); 
} 

?

미리 감사드립니다.

+2

요청의 'Credentials' 속성을 직접 설정하려고 시도한 적이 있습니까? –

+0

@ Moo-Juice 죄송합니다. 시도하지 않았습니다. 또한, 나는 그것에 대해 인식하지 못한다. REST API를 처음 사용했습니다 –

+0

Authorization 헤더 값을 생성하는 데 사용하는 논리가 올바른지 확인하십시오. (REST API 제공 업체에서 가져와야 함) –

답변

0

.

+0

예! 이 라인 오류로 인해 401 인증되지 않은 오류가 발생하지만 그 이유는 무엇인지 알 수 없습니다. –

+0

API이기 때문에 REST API 공급자로부터 값을 생성하는 방법에 대한 정보를 얻어야합니다. 특정, 많은 방법으로 할 수 있습니다. –

0

이 코드는 JavaScriptSerializer에 대한 REST API 광고

public static string CallRestMethod(string url) 
{ 
    HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(url); 
    webrequest.Method = "GET"; 
    webrequest.ContentType = "application/x-www-form-urlencoded"; 
    webrequest.Headers.Add("Username", "xyz"); 
    webrequest.Headers.Add("Password", "abc"); 
    HttpWebResponse webresponse = (HttpWebResponse)webrequest.GetResponse(); 
    Encoding enc = System.Text.Encoding.GetEncoding("utf-8"); 
    StreamReader responseStream = new StreamReader(webresponse.GetResponseStream(), enc); 
    string result = string.Empty; 
    result = responseStream.ReadToEnd(); 
    webresponse.Close(); 
    return result; 
} 

새로운 기능 나머지 API 광고

머스트 가져 오기의 DLL System.WebSystem.Web.Extensions를 호출하는 방법을 보여줍니다 수

Sys tem.Web.Script.Serialization;

request.Headers["Authorization"]= 
Basic+ 
Convert.ToBase64String(Encoding.Default.GetBytes("userName:passWord")); 

위의 설정 값은 API가 기대하는 것이 아니다 : 당신은 여기에 뭔가 잘못하고있는

public string Requst(string Url, string Method, object Parameter) 
{ 
     try 
     { 
      var result = ""; 
      var url = Url; 
      var webrequest = (HttpWebRequest)System.Net.WebRequest.Create(url); 
      webrequest.ContentType = "application/json"; 
      webrequest.Method = Method.ToString(); 

      NetworkCredential netcred = new NetworkCredential(){ 
       Domain = "", 
       UserName = "", 
       Password = "" 
      }; 

      webrequest.Credentials = netcred; 

      if (Method.ToString() == "POST") 
      { 
       using (var streamWriter = new StreamWriter(webrequest.GetRequestStream())) 
       { 
        streamWriter.Write(new JavaScriptSerializer().Serialize(Parameter)); 
       } 
      } 

      var httpResponse = (HttpWebResponse)webrequest.GetResponse(); 
      using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
      { 
       result = streamReader.ReadToEnd(); 
      } 

      return result.ToString(); 
     } 
     catch (Exception ex) 
     { 
      return "-1"; 
     } 
} 
+0

응답 해 주셔서 감사합니다. 귀하의 예제에 따라 코드를 변경했지만, 현재도 ** ** 401 예외 **를 겪고 있습니다. –

+0

@Muhamadd Usama Alam 답변 해 주셔서 감사합니다. 다시 ** 401 예외 ** : ( –

+0

@ Arunald, 제 3 자 웹 API가 있으면이 API 공급자의 링크를 제공하므로 테스트하고 문제의 해결책을 제공합니다. –

관련 문제