簡體   English   中英

Twitter API返回401-未經授權

[英]Twitter API returns 401 - unauthorized

我在使用Twitter API時遇到問題。 我要做的就是讓用戶能夠通過我的網站上的twitter登錄。

我正在使用此庫: Twitter

圖書館對於Google和Facebook都適用,但是使用Twitter時我無法使其正常工作。

我收到:

System.Net.WebException:遠程服務器返回錯誤:(401)未經授權。

我已經嘗試過的:

在Twitter開發人員控制台上設置訪問令牌,並將此訪問令牌粘貼到標頭。

我遵循了Twitter上此鏈接的說明,並創建了“授權”標頭。 它不起作用,例外仍然是401-未經授權。

我不明白的一件事是在此鏈接中

401錯誤的解釋是:

身份驗證憑據丟失或不正確。 在其他情況下也會返回,例如,對API v1端點的所有調用現在都返回401(改為使用API​​ v1.1)。

因此,所有對API v1的調用都將返回401。“改為使用API​​ v1.1”-如何執行此操作? 使用v1.1代替v1的設置在哪里?

這是原始代碼中的方法,經過我的修改-添加了“ Authorization”標頭:

namespace Oauth2Login.Core
{
    public class RestfullRequest
    {
        public static string Request(string url, string method, string contentType, NameValueCollection authorizationHeader,
            string data, string proxyAddress = null)
        {
            var request = (HttpWebRequest) WebRequest.Create(url);
            request.Method = method;
            if (!string.IsNullOrEmpty(contentType))
                request.ContentType = contentType;

            string authHeaderString = "OAuth ";
            authHeaderString += PercentEncode("oauth_consumer_key") + "=\"" + (authorizationHeader.GetValues("oauth_consumer_key"))[0] + "\", ";
            authHeaderString += PercentEncode("oauth_nonce") + "=\"" + PercentEncode((authorizationHeader.GetValues("oauth_nonce"))[0]) + "\", ";
            authHeaderString += PercentEncode("oauth_signature") + "=\"" + PercentEncode((authorizationHeader.GetValues("oauth_signature"))[0]) + "\", ";
            authHeaderString += PercentEncode("oauth_signature_method") + "=\"" + PercentEncode((authorizationHeader.GetValues("oauth_signature_method"))[0]) + "\", ";
            authHeaderString += PercentEncode("oauth_timestamp") + "=\"" + PercentEncode((authorizationHeader.GetValues("oauth_timestamp"))[0]) + "\", ";
            authHeaderString += PercentEncode("oauth_token") + "=\"" + PercentEncode((authorizationHeader.GetValues("oauth_token"))[0]) + "\", ";
            authHeaderString += PercentEncode("oauth_version") + "=\"" + PercentEncode((authorizationHeader.GetValues("oauth_version"))[0]) + "\"";

            request.Headers.Add("Authorization", authHeaderString);

            if (!string.IsNullOrEmpty(proxyAddress))
            {
                IWebProxy proxy = new WebProxy(proxyAddress);
                proxy.Credentials = new NetworkCredential();
                request.Proxy = proxy;
            }

            if (!string.IsNullOrEmpty(data))
            {
                using (var swt = new StreamWriter(request.GetRequestStream()))
                {
                    swt.Write(data);
                }
            }

            string result = string.Empty;

            /*this line throws 401 - not authorized exception*/
            using (WebResponse response = request.GetResponse())
            {
                using (var sr = new StreamReader(response.GetResponseStream()))
                {
                    result = sr.ReadToEnd();
                }
            }
            return result;
        }

        public static string PercentEncode(string source)
        {
            return source
                .Replace(" ", "%20").Replace("!", "%21").Replace("&", "%26")
                .Replace(@"/", "%2F").Replace("=", "%3D").Replace("+", "%2B")
                .Replace(",", "%2C").Replace("-", "%2D").Replace(".", "%2E");
        }        
    }
}

也許這可以幫助您:

如何使用游標使用c#在Twitter API中遍歷GET關注者/列表的結果集?

檢查零件,直到私有void StartCreateCall()方法中的注釋“ //現在我們已被授予訪問權限...”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM