C# Twitter获取请求\u令牌问题,出现异步-401错误
我在从Twitter异步获取请求令牌时遇到问题-服务器返回“远程服务器返回错误:(401)未经授权。” 这是我正在使用的代码-C# Twitter获取请求\u令牌问题,出现异步-401错误,c#,twitter,asynchronous,C#,Twitter,Asynchronous,我在从Twitter异步获取请求令牌时遇到问题-服务器返回“远程服务器返回错误:(401)未经授权。” 这是我正在使用的代码- public void AcquireRequestToken(Action<bool> response) { string oauth_nonce = Convert.ToBase64String(new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString())); // buil
public void AcquireRequestToken(Action<bool> response)
{
string oauth_nonce = Convert.ToBase64String(new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString()));
// build the signature
var headers = new Dictionary<string,string>()
{
{ "oauth_consumer_key", _oAuthConfig.ConsumerKey },
{ "oauth_nonce", oauth_nonce },
{ "oauth_signature_method", "HMAC-SHA1" },
{ "oauth_timestamp", MakeTimestamp() },
{ "oauth_version", "1.0" },
{ "oauth_callback", PercentEncode(_oAuthConfig.Callback) },
};
string signature = MakeSignature ("POST", _oAuthConfig.RequestTokenUrl, headers);
string compositeSigningKey = MakeSigningKey(_oAuthConfig.ConsumerSecret, null);
string oauth_signature = MakeOAuthSignature(compositeSigningKey, signature);
Uri fullUri = new Uri(_oAuthConfig.RequestTokenUrl);
var request = (HttpWebRequest)WebRequest.Create(fullUri);
request.Method = "POST";
request.Headers.Add("oauth_consumer_key", PercentEncode(_oAuthConfig.ConsumerKey));
request.Headers.Add("oauth_nonce", PercentEncode(oauth_nonce));
request.Headers.Add("oauth_signature_method", PercentEncode("HMAC-SHA1"));
request.Headers.Add("oauth_timestamp", PercentEncode(MakeTimestamp()));
request.Headers.Add("oauth_version", "1.0");
request.Headers.Add("oauth_callback", PercentEncode(_oAuthConfig.Callback));
request.Headers.Add("oauth_signature", PercentEncode(oauth_signature));
try
{
request.BeginGetResponse(new AsyncCallback(result =>
{
string contents = String.Empty;
HttpWebRequest theRequest = (HttpWebRequest)result.AsyncState;
if (theRequest != null)
{
try
{
HttpWebResponse theResponse = (HttpWebResponse)theRequest.EndGetResponse(result);
using (Stream stream = theResponse.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
contents = reader.ReadToEnd();
}
Dictionary<string, object> results = JsonConvert.DeserializeObject<Dictionary<string, object>>(contents);
_requestToken = (string)results ["oauth_token"];
_requestTokenSecret = (string)results ["oauth_token_secret"];
response(true);
}
catch (WebException e)
{
response(false);
}
}
else
{
response(false);
}
}), request);
}
catch (WebException e)
{
response(false);
}
}
公共请求令牌(操作响应)
{
string oauth_nonce=Convert.ToBase64String(new ascienceoding().GetBytes(DateTime.Now.Ticks.ToString());
//构建签名
var headers=newdictionary()
{
{“oauth_consumer_key”,_oAuthConfig.ConsumerKey},
{“oauth_nonce”,oauth_nonce},
{“oauth_签名法”,“HMAC-SHA1”},
{“oauth_timestamp”,MakeTimestamp()},
{“oauth_版本”,“1.0”},
{“oauth_callback”,PercentEncode(_oAuthConfig.callback)},
};
string signature=MakeSignature(“POST”,_oAuthConfig.RequestTokenUrl,headers);
string compositeSigningKey=MakeSigningKey(_oAuthConfig.ConsumerCret,null);
字符串oauth_签名=MakeOAuthSignature(compositeSigningKey,签名);
urifulluri=新的Uri(_oAuthConfig.RequestTokenUrl);
var request=(HttpWebRequest)WebRequest.Create(fullUri);
request.Method=“POST”;
Add(“oauth_consumer_key”,PercentEncode(_oAuthConfig.ConsumerKey));
Add(“oauth_nonce”,PercentEncode(oauth_nonce));
添加(“oauth_签名_方法”,PercentEncode(“HMAC-SHA1”);
Add(“oauth_timestamp”,PercentEncode(MakeTimestamp());
添加(“oauth_版本”、“1.0”);
Add(“oauth_callback”,PercentEncode(_oAuthConfig.callback));
Add(“oauth_签名”,PercentEncode(oauth_签名));
尝试
{
request.BeginGetResponse(新的AsyncCallback(结果=>
{
string contents=string.Empty;
HttpWebRequest theRequest=(HttpWebRequest)result.AsyncState;
如果(请求!=null)
{
尝试
{
HttpWebResponse theResponse=(HttpWebResponse)theRequest.EndGetResponse(结果);
使用(Stream=theResponse.GetResponseStream())
使用(StreamReader=新StreamReader(stream))
{
contents=reader.ReadToEnd();
}
Dictionary results=JsonConvert.DeserializeObject(内容);
_requestToken=(字符串)结果[“oauth_令牌”];
_requestTokenSecret=(字符串)结果[“oauth_token_secret”];
回答(正确);
}
捕获(WebE例外)
{
回答(假);
}
}
其他的
{
回答(假);
}
}),请求);
}
捕获(WebE例外)
{
回答(假);
}
}
我的旧(非异步)代码运行良好-
public bool AcquireRequestToken()
{
var headers = new Dictionary<string,string>()
{
{ "oauth_callback", PercentEncode(_oAuthConfig.Callback) },
{ "oauth_consumer_key", _oAuthConfig.ConsumerKey },
{ "oauth_signature_method", "HMAC-SHA1" },
{ "oauth_timestamp", MakeTimestamp() },
{ "oauth_version", "1.0" }
};
string signature = MakeSignature ("POST", _oAuthConfig.RequestTokenUrl, headers);
string compositeSigningKey = MakeSigningKey(_oAuthConfig.ConsumerSecret, null);
string oauth_signature = MakeOAuthSignature(compositeSigningKey, signature);
var wc = new WebClient ();
headers.Add ("oauth_signature", PercentEncode(oauth_signature));
wc.Headers [HttpRequestHeader.Authorization] = HeadersToOAuth(headers);
try
{
var result = HttpUtility.ParseQueryString(wc.UploadString (new Uri(_oAuthConfig.RequestTokenUrl), ""));
if (result ["oauth_callback_confirmed"] != null)
{
_requestToken = result ["oauth_token"];
_requestTokenSecret = result ["oauth_token_secret"];
return true;
}
}
catch (Exception e)
{
return false;
}
}
public bool收单机构equestToken()
{
var headers=newdictionary()
{
{“oauth_callback”,PercentEncode(_oAuthConfig.callback)},
{“oauth_consumer_key”,_oAuthConfig.ConsumerKey},
{“oauth_签名法”,“HMAC-SHA1”},
{“oauth_timestamp”,MakeTimestamp()},
{“oauth_版本”,“1.0”}
};
string signature=MakeSignature(“POST”,_oAuthConfig.RequestTokenUrl,headers);
string compositeSigningKey=MakeSigningKey(_oAuthConfig.ConsumerCret,null);
字符串oauth_签名=MakeOAuthSignature(compositeSigningKey,签名);
var wc=新的WebClient();
添加(“oauth_签名”,百分比编码(oauth_签名));
wc.Headers[HttpRequestHeader.Authorization]=headerstoauth(Headers);
尝试
{
var result=HttpUtility.ParseQueryString(wc.UploadString(新Uri(_oAuthConfig.RequestTokenUrl),“”);
if(结果[“oauth\u回调\u确认”]!=null)
{
_requestToken=result[“oauth_token”];
_requestTokenSecret=result[“oauth_-token_-secret”];
返回true;
}
}
捕获(例外e)
{
返回false;
}
}
新版本中的标题略有不同,但保持它们不变没有帮助
谢谢你的建议 标题有误。只有一个HTTP头名为
授权
:
Authorization: OAuth oauth_consumer_key="<the consumer key of your app>", oauth_nonce="<the nonce>", oauth_signature="<the signature>", oauth_signature_method="HMAC-SHA1", oauth_timestamp="<the timestamp>", oauth_token="<your token>", oauth_version="1.0"
Authorization:OAuth-OAuth\u consumer\u key=“”,OAuth\u nonce=“”,OAuth\u signature=“”,OAuth\u signature\u method=“HMAC-SHA1”,OAuth\u timestamp=“”,OAuth\u token=“”,OAuth\u version=“1.0”
此页面将告诉您如何制作:。除两种方法外,所有方法均相同:
需要request_token
,但不需要oauth_回调
(因为您没有它,所以这很正常)oauth_token
需要access\u-token
(您将在第二步后获得它)oauth\u-verifier