2014-09-17 8 views
0

Я использую yahoo oAuth1 и yahoo API, чтобы получить список контактов с сервера yahoo.Ошибка HTTP 406, когда я пытаюсь получить доступ к API Yahoo

Вот код, который я использую, чтобы получить контакты:

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

Для начала это ошибка 406 (идет по скриншоту), а не 404. Использует ли отладчик, например [Fiddler] (http://fiddlertool.com), что-нибудь более полезное? –

+0

Rowland, спасибо. Моя ошибка! – Michael

ответ

1

Попробуйте установить заголовок Accept в свой HTTP-запрос. Что-то вроде этого:

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

HTTP 406 указывает на то, что либо этот заголовок, как ожидается, но не хватает, или что он присутствовал, но не указать Content-Type, который совместим с ресурсом (например, просить Accept: text/html когда это запрашивая изображение в формате JPEG.)

См. также заголовки Accept-Charset, Accept-Encoding и Accept-Language, которые также могут запускать этот код состояния.

1

Мой вопрос был связан с форматом = XML> изменить его для форматирования = JSON и изменения как принимать и тип содержимого заголовков в appliocation/JSON, возвращает письма, которые я пытался получить

Get Yahoo Contact List in C# application

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

  • Нет связанных вопросов^_^