2014-09-17 6 views
0

yahoo 서버에서 연락처 목록을 가져 오기 위해 yahoo oAuth1 및 yahoo API를 사용합니다. 여기yahoo API에 액세스하려고하면 HTTP 오류 406가 발생합니다.

내가 연락처를 얻기 위해 사용하는 코드 :

private void RetriveContacts() 
     { 
      OAuthBase oauth = new OAuthBase(); 
      Uri uri = new Uri("https://social.yahooapis.com/v1/user/" + (string)Session["xoauth_yahoo_guid"] + "/contacts?format=XML"); 
      string nonce = oauth.GenerateNonce(); 
      string timeStamp = oauth.GenerateTimeStamp(); 
      string normalizedUrl; 
      string normalizedRequestParameters; 
      string sig = oauth.GenerateSignature(uri, ConsumerKey, ConsumerSecret, 
               (string)Session["oauth_token"], (string)Session["oauth_token_secret"], "GET", 
               timeStamp, nonce, OAuthBase.SignatureTypes.HMACSHA1, 
               out normalizedUrl, out normalizedRequestParameters); 
     StringBuilder sbGetContacts = new StringBuilder(uri.ToString()); 

     try 
     { 
      string returnStr = string.Empty; 
      HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sbGetContacts.ToString()); 
      req.Method = "GET"; 

      string authHeader = "Authorization: OAuth " + 
      "realm=\"yahooapis.com\"" + 
      ",oauth_consumer_key=\"" + ConsumerKey + "\"" + 
      ",oauth_nonce=\"" + nonce + "\"" + 
      ",oauth_signature_method=\"HMAC-SHA1\"" + 
      ",oauth_timestamp=\"" + timeStamp + "\"" + 
      ",oauth_token=\"" + (string)Session["oauth_token"] + "\"" + 
      ",oauth_version=\"1.0\"" + 
      ",oauth_signature=\"" + HttpUtility.UrlEncode(sig) + "\""; 

      req.Headers.Add(authHeader); 

      HttpWebResponse res = (HttpWebResponse)req.GetResponse(); 
      StreamReader streamReader = new StreamReader(res.GetResponseStream()); 
      returnStr = streamReader.ReadToEnd(); 

      XmlDocument xmldoc = new XmlDocument(); 
      xmldoc.LoadXml(returnStr); 
      XmlNodeList elemList = xmldoc.DocumentElement.GetElementsByTagName("fields"); 

      List<string> emails = new List<string>(); 
      for (int i = 0; i < elemList.Count; i++) 
      { 
       if (elemList[i].ChildNodes[1].InnerText == "email") 
        emails.Add(elemList[i].ChildNodes[2].InnerText); 
       //Response.Write(elemList[i].ChildNodes[2].InnerText + "<br/>"); 
      } 

     } 
     catch (WebException ex) 
     { 
      //Response.Write(ex.Message); 
      Response.Write("<br/>" + ex.Message + "</br>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); 
      Response.Write("<br/>length: " + ex.Source.Length.ToString()); 
      Response.Write("<br/>stack trace: " + ex.StackTrace); 
      Response.Write("<br/>status: " + ex.Status.ToString()); 
      HttpWebResponse res = (HttpWebResponse)ex.Response; 
      int code = Convert.ToInt32(res.StatusCode); 

      Response.Write("<br/>Status Code: (" + code.ToString() + ") " + res.StatusCode.ToString()); 
      Response.Write("<br/>Status Description: " + res.StatusDescription); 

      if (ex.InnerException != null) 
      { 
       Response.Write("<br/>innerexception: " + ex.InnerException.Message); 
      } 

      if (ex.Source.Length > 0) 
       Response.Write("<br/>source: " + ex.Source.ToString()); 

      if (res != null) 
      { 
       for (int i = 0; i < res.Headers.Count; i++) 
       { 
        Response.Write("<br/>headers: " + i.ToString() + ": " + res.Headers[i]); 
       } 
      } 
     } 
    } 

그러나이 행에 :

  HttpWebResponse res = (HttpWebResponse)req.GetResponse(); 

나는이 오류 얻을 :

enter image description here

상관 없음 왜 이 오류가 발생하고이를 수정하는 방법은 무엇입니까?

미리 감사드립니다.

+0

처음에는 404 오류가 아닌 406 오류입니다 (스크린 샷으로 이동). [Fiddler] (http://fiddlertool.com)와 같은 디버거를 사용하면 더 유용한 정보가 있습니까? –

+0

Rowland, 고마워. 내 실수 야! – Michael

답변

1

HTTP 요청에 Accept 헤더를 설정해보십시오. 이런 식으로 뭔가 :

Accept: text/html,*/*;q=0.9

HTTP 406이 헤더 중 하나가 예상되지만 누락되어 있음을 나타냅니다, 또는 존재하지만, 예를 들어 Accept: text/html 때 요구 (자원과 호환되는 콘텐츠 형식을 지정하지 않았다 JPEG 이미지 요청)

이 상태 코드를 트리거 할 수있는 Accept-Charset, Accept-EncodingAccept-Language 헤더도 참조하십시오.

1

내 문제는 형식으로 변경> 형식 = XML로해야 할 일을했을 = JSON은 변화하는 모두 수용하고 appliocation/JSON 콘텐츠 형식 헤더는, 내가

Get Yahoo Contact List in C# application

을 얻으려고 노력했다 이메일을 반환