0

我使用 yahoo oAuth1 和 yahoo 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();

我得到这个错误:

在此处输入图像描述

为什么我会收到此错误以及如何解决?

先感谢您。

4

2 回答 2

1

尝试Accept在您的 HTTP 请求中设置标头。像这样的东西:

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

HTTP 406 表示此标头是预期的但缺少,或者它存在但未指定与资源兼容的 Content-Type(例如,Accept: text/html在请求 JPEG 图像时要求。)

另请参阅也可以触发此状态代码的 、 和 标Accept-CharsetAccept-EncodingAccept-Language

于 2014-09-17T23:09:41.833 回答
1

我的问题与 format=XML > 将其更改为 format=json 并将接受和内容类型标头更改为 appliocation/json 相关,返回我试图获取的电子邮件

在 C# 应用程序中获取 Yahoo 联系人列表

于 2015-12-17T10:41:49.933 回答