C# 401来自使用C的Twitter流API的错误#
当我尝试将其转换为流api时,我得到了401:“”。我真的很感激任何帮助。见下面的代码:C# 401来自使用C的Twitter流API的错误#,c#,api,twitter,stream,http-status-code-401,C#,Api,Twitter,Stream,Http Status Code 401,当我尝试将其转换为流api时,我得到了401:“”。我真的很感激任何帮助。见下面的代码: HttpWebRequest请求=null; 字符串oauth_consumer_key=“xxxxxxxxxxxx”; 字符串oauth_consumer_secret=“xxxxxxxxxxxxxx”; 字符串oauth_token=“XXXXXXXXXXXXXXXXXXXXXX”; 字符串oauth_token_secret=“XXXXXXXXXXXXXXXXXXXXXXXXX”; 字符串oauth
HttpWebRequest请求=null;
字符串oauth_consumer_key=“xxxxxxxxxxxx”;
字符串oauth_consumer_secret=“xxxxxxxxxxxxxx”;
字符串oauth_token=“XXXXXXXXXXXXXXXXXXXXXX”;
字符串oauth_token_secret=“XXXXXXXXXXXXXXXXXXXXXXXXX”;
字符串oauth_version=“1.0”;
字符串oauth_signature_method=“HMAC-SHA1”;
string oauth_nonce=Convert.ToBase64String(new ascienceoding().GetBytes(DateTime.Now.Ticks.ToString());
TimeSpan TimeSpan=DateTime.UtcNow—新的日期时间(1970,1,1,0,0,0,DateTimeKind.Utc);
字符串oauth_timestamp=Convert.ToInt64(timeSpan.TotalSeconds).ToString();
Encoding encoder=System.Text.Encoding.GetEncoding(“utf-8”);
int退避=250;
string line=string.Empty;
尝试
{
字符串参数=this.GetQuery(模板);
string baseFormat=“oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}”+
“&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}”;
&磁道={6}”
string baseString=string.Format(baseFormat,
oauth_消费者_密钥,
现在,
oauth_签名_方法,
oauth_时间戳,
oauth_代币,
oauth_版本,
Uri.EscapeDataString(参数)
);
baseString=string.Concat(“POST&”,Uri.EscapeDataString(this.Datasource),“&”,Uri.EscapeDataString(baseString));
string compositeKey=string.Concat(Uri.EscapeDataString(oauth_consumer_secret),“&”,Uri.EscapeDataString(oauth_token_secret));
字符串oauth_签名;
使用(HMACSHA1 hasher=newhmacsha1(ascienceoding.ASCII.GetBytes(compositeKey)))
{
oauth_签名=Convert.ToBase64String(
ComputeHash(ascienceoding.ASCII.GetBytes(baseString));
}
//创建请求头
字符串headerFormat=“OAuth OAuth\u consumer\u key=\“{0}\”,OAuth\u nonce=\“{1}\”,“+
“oauth\u签名=\”{2}\”,oauth\u签名\方法=\”{3}\,”+
“oauth\u时间戳=\”{4}\”+
“oauth_令牌=\”{5}\”+
“oauth\u版本=\”{6}\”;
string authHeader=string.Format(headerFormat,
Uri.EscapeDataString(oauth_消费者_密钥),
Uri.EscapeDataString(oauth_nonce),
Uri.EscapeDataString(oauth_签名),
EscapeDataString(oauth_签名_方法),
Uri.EscapeDataString(oauth_时间戳),
Uri.EscapeDataString(oauth_令牌),
EscapeDataString(oauth_版本)
);
ServicePointManager.Expect100Continue=false;
//stringpostbody=string.Format(“track={0}”,参数);
string postBody=“track=“+Uri.EscapeDataString(参数);
request=(HttpWebRequest)WebRequest.Create(this.Datasource+“?”+postBody);
添加(“授权”,authHeader);
request.Method=“POST”;
request.ContentType=“application/x-www-form-urlencoded”;
request.PreAuthenticate=true;
request.AllowWriteStreamBuffering=true;
使用(WebResponse=request.GetResponse())
{
使用(StreamReader=newstreamreader(response.GetResponseStream())
{
string responseData=new StreamReader(response.GetResponseStream()).ReadToEnd();
//我们已成功连接,因此请重置twitter回退时间
}
捕获(WebException wex)
{
if(wex.Status==WebExceptionStatus.ProtocolError)
{
/*根据twitter api
*
*当返回HTTP错误(>200)时,以指数方式退出。
*也许从10秒的等待开始,每次失败后加倍,
*最后将等待时间限制在240秒。
*
*指数退避
*/
if(后退
FilteredStream stream = new FilteredStream();
// Create a Token to access Twitter
IToken token = new Token("userKey", "userSecret", "consumerKey", "consumerSecret");
// Adding Tracks filters
stream.AddTrack("HelloMartha");
stream.AddTrack("TrackNumber2!");
// Write the Text of each Tweet in the Console
stream.StartStream(token, x => Console.WriteLine(x.Text));