Tôi có đoạn code sau không biết xấu hổ lấy từ dev.twitter để có được dòng thời gian của một người dùng cụ thể:Tại sao cuộc gọi của tôi nhận được dòng thời gian người dùng Twitter trả về "401 trái phép"?
string endpoint = "https://api.twitter.com/1.1/statuses/user_timeline.json";
string user_name = ".....";
string ConsumerKey = "....";
string ConsumerSecret = "........";
string Token = ".......";
string TokenSecret = "........";
// oauth application keys
var oauth_token = Token;
var oauth_token_secret = TokenSecret;
var oauth_consumer_key = ConsumerKey;
var oauth_consumer_secret = ConsumerSecret;
// oauth implementation details
var oauth_version = "1.0";
var oauth_signature_method = "HMAC-SHA1";
// unique request details
var oauth_nonce = Convert.ToBase64String(new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString()));
var timeSpan = DateTime.UtcNow
- new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
var oauth_timestamp = Convert.ToInt64(timeSpan.TotalSeconds).ToString();
var baseFormat = "oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}" +
"&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}&screen_name={6}";
var baseString = string.Format(baseFormat,
oauth_consumer_key,
oauth_nonce,
oauth_signature_method,
oauth_timestamp,
oauth_token,
oauth_version,
user_name
);
//&include_rts=true &exclude_replies=false
baseString = string.Concat("GET&", Uri.EscapeDataString(endpoint), "&", Uri.EscapeDataString(baseString));
var compositeKey = string.Concat(Uri.EscapeDataString(oauth_consumer_secret),
"&", Uri.EscapeDataString(oauth_token_secret));
string oauth_signature;
using (HMACSHA1 hasher = new HMACSHA1(ASCIIEncoding.ASCII.GetBytes(compositeKey)))
{
oauth_signature = Convert.ToBase64String(hasher.ComputeHash(ASCIIEncoding.ASCII.GetBytes(baseString)));
}
string headerFormat = "OAuth oauth_nonce=\"{0}\", oauth_signature_method=\"{1}\", " +
"oauth_timestamp=\"{2}\", oauth_consumer_key=\"{3}\", " +
"oauth_token=\"{4}\", oauth_signature=\"{5}\", " +
"oauth_version=\"{6}\",screen_name=\"{7}\"";
var authHeader = string.Format(headerFormat,
Uri.EscapeDataString(oauth_nonce),
Uri.EscapeDataString(oauth_signature_method),
Uri.EscapeDataString(oauth_timestamp),
Uri.EscapeDataString(oauth_consumer_key),
Uri.EscapeDataString(oauth_token),
Uri.EscapeDataString(oauth_signature),
Uri.EscapeDataString(oauth_version),
Uri.EscapeDataString(user_name)
);
// make the request
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endpoint);
request.Headers.Add("Authorization", authHeader);
request.Method = "GET";
request.ContentType = "application/x-www-form-urlencoded";
var response = (HttpWebResponse)request.GetResponse();
var reader = new StreamReader(response.GetResponseStream());
var objText = reader.ReadToEnd();
Tuy nhiên, tôi nhận được một 401, lỗi trái phép trên dòng này:
var response = (HttpWebResponse)request.GetResponse();
(thực ra là vài áp phích cuối cùng trên luồng phát triển Twitter).
Có cách nào tôi có thể nhanh chóng kiểm tra xem các mã thông báo, khóa và bí mật khác nhau của tôi có hợp lệ không và nên trả lại dữ liệu tôi đang tìm kiếm?
Lý do là vì (khi tôi bắt đầu nghi ngờ) bạn cần thực hiện cuộc gọi "ủy quyền cho ứng dụng này" (muốn có cụm từ tốt hơn) trước khi thực hiện cuộc gọi "nhận thời gian" thực tế. – ChrisF
Đẹp nhất. Tôi đã đánh dấu câu hỏi của bạn. – hutchonoid