РЕДАКТИРОВАТЬ: Моя первоначальная проблема была связана с проблемой брандмауэра, теперь моя проблема в моем разрешении. Я получаю оба метода ниже и «Неавторизованный» ответ.
Я пытаюсь создать метод, который позволит мне публиковать обновление статуса в твиттере. Я пытаюсь использовать в своем приложении, чтобы я мог знать, когда определенные события происходят в течение дня, без необходимости следить за журналами, поэтому я подумал, что это будет крутой способ выдавать уведомления sh. Единственный другой вариант, о котором я мог подумать, - это уведомления по электронной почте, но я хотел попробовать что-то другое (открытое для любых других идей, касающихся pu sh уведомлений)
Я боролся большую часть дня, чтобы попытаться получить это. код для работы. Большинство примеров и вопросов, которые я рассматривал, довольно старые. Ниже приведен код, который я запускаю.
Response.StatusCode = 0 и Response.Content пустые, и я не могу понять, что я делаю здесь неправильно. Не генерируется никаких исключений, поэтому ответ должен выполняться, но ничего не возвращается.
Я следовал приведенному здесь руководству по созданию подписи. https://developer.twitter.com/en/docs/basics/authentication/oauth-1-0a/creating-a-signature
Любая обратная связь будет приветствоваться, мне интересно, если есть что-то очевидное, что я делаю неправильно.
Как только у меня есть решение для этого, я ' Я надеюсь поделиться им, как только он будет очищен с гораздо большим количеством комментариев.
Использование кода ниже
Tweet t = new Tweet();
t.TestTweet();
Дополнительные пространства имен
using RestSharp;
using System.Security.Cryptography;
Класс
class Tweet
{
private string myFirstMessage = "First Message Using RestSharp";
private const string baseTwitterURL = "https://api.twitter.com/1.1/statuses/update.json";
//Keys in Alphabetical Order
private string oauth_consumer_key = GlobalVariables.ConsumerKey;
private string oauth_nonce = "abcd";
private string oauth_signature;
private string oauth_signature_method = "HMAC-SHA1";
private string oauth_timestamp;
private string oauth_token = GlobalVariables.Token;
private string oauth_version = "1.0";
private string ConsumerKeySecret = GlobalVariables.ConsumerKeySecret;
private string AccessTokenSecret = GlobalVariables.AccessTokenSecret;
public Tweet()
{
DateTime epochUtc = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
var timestamp = (int)((DateTime.UtcNow - epochUtc).TotalSeconds);
oauth_timestamp = timestamp.ToString();
}
public void TestTweet()
{
string fullURL = baseTwitterURL + Uri.EscapeDataString(myFirstMessage);
var client = new RestClient(fullURL);
var request = new RestRequest(Method.POST);
string parameterString = GenerateParameterString(oauth_consumer_key, oauth_nonce, oauth_signature_method, oauth_timestamp, oauth_token, oauth_version);
string signatureBaseString = GenerateSignatureBaseString(parameterString);
string signingKey = GenerateSigningKey();
HMACSHA1 mySignature = new HMACSHA1();
oauth_signature = Convert.ToBase64String(mySignature.ComputeHash(new ASCIIEncoding().GetBytes(string.Format("{0}&{1}", signatureBaseString, signingKey))));
request.AddHeader("authorization", "OAuth");
request.AddParameter("oauth_consumer_key", oauth_consumer_key);
request.AddParameter("oauth_nonce", oauth_nonce);
request.AddParameter("oauth_signature", oauth_signature);
request.AddParameter("oauth_signature_method", oauth_signature_method);
request.AddParameter("oauth_timestamp", oauth_timestamp);
request.AddParameter("oauth_token", oauth_token);
request.AddParameter("oauth_version", oauth_version);
string requestString = string.Join(",", request.Parameters.ToList());
try
{
Console.WriteLine("Attemping to send response" + "\n");
IRestResponse response = client.Execute(request);
}
catch (Exception Ex)
{
Console.WriteLine("Exception Ex.Message: " + Ex.Message);
Console.WriteLine("Exception Ex.ToString: " + Ex.ToString());
}
}
public string GenerateParameterString(
string oauth_consumer_key,
string oauth_nonce,
string oauth_signature_method,
string oauth_timestamp,
string oauth_token,
string oauth_version)
{
StringBuilder parameterString = new StringBuilder();
parameterString.Append("include_entities=true&");
parameterString.Append("oauth_consumer_key=" + Uri.EscapeDataString(oauth_consumer_key) + "&");
parameterString.Append("oauth_nonce=" + Uri.EscapeDataString(oauth_nonce) + "&");
parameterString.Append("oauth_signature_method=" + Uri.EscapeDataString(oauth_signature_method) + "&");
parameterString.Append("oauth_timestamp=" + Uri.EscapeDataString(oauth_timestamp) + "&");
parameterString.Append("oauth_token=" + Uri.EscapeDataString(oauth_token) + "&");
parameterString.Append("oauth_version=" + Uri.EscapeDataString(oauth_version) + "&");
parameterString.Append("status=" + Uri.EscapeDataString(myFirstMessage));
return parameterString.ToString();
}
public string GenerateSignatureBaseString(string parameterString)
{
StringBuilder SignatureBaseString = new StringBuilder();
SignatureBaseString.Append("POST&");
SignatureBaseString.Append(Uri.EscapeDataString(baseTwitterURL));
SignatureBaseString.Append("&");
SignatureBaseString.Append(Uri.EscapeDataString(parameterString));
return SignatureBaseString.ToString();
}
public string GenerateSigningKey()
{
StringBuilder SigningKey = new StringBuilder();
SigningKey.Append(Uri.EscapeDataString(ConsumerKeySecret));
SigningKey.Append("&");
SigningKey.Append(Uri.EscapeDataString(AccessTokenSecret));
return SigningKey.ToString();
}
}
Отредактировано: RestSharp OAuth1 Метод аутентификатора
public void TestTweetWithAuthenticator()
{
string fullURL = baseTwitterURL;
var client = new RestClient(fullURL)
{
Authenticator = OAuth1Authenticator.ForProtectedResource(oauth_consumer_key, ConsumerKeySecret, oauth_token, AccessTokenSecret)
};
var request = new RestRequest(Method.POST);
request.AddParameter("status", Uri.EscapeDataString(myFirstMessage));
try
{
Console.WriteLine("Attemping to send response" + "\n");
IRestResponse response = client.Execute(request);
}
catch (Exception Ex)
{
}
}