Próbuję opublikować status Twittera z mojej aplikacji internetowej, używając RestSharp. Poniższy kod działa perfekcyjnie:RestSharp and Twitter API 1.1: Jak poprawnie zaktualizować tekst statusu URLEncode?
var status = "I am fine with posting this status.";
var client = new RestClient("https://api.twitter.com");
// The OAuth keys/tokens/secrets are retrieved elsewhere
client.Authenticator = OAuth1Authenticator.ForProtectedResource(
_consumerKey, _consumerSecret, _accessToken, _accessTokenSecret
);
var request = new RestRequest("/1.1/statuses/update.json", Method.POST);
request.AddParameter("status", status, ParameterType.GetOrPost);
var response = client.Execute(request);
Jednak ten kod nie powiedzie się z powodu błędu uwierzytelniania gdybym zawierać żadnego z następujących znaków w tekście Status: ! * ' ()
Poprzez partii z forum trałowania, ja Wywnioskowałem, że ma to coś wspólnego z kodowaniem podpisów OAuth, które nie pasuje do kodowania parametrów POST. Znalazłem this question on SO, ale poszukiwanie problemów RestSharp na GitHubie nie przynosi nic pożytecznego.
Widzę some code in the RestSharp source (UrlEncodeRelaxed
), który wydaje się kodować ręcznie ten konkretny zestaw znaków, aby zachować zgodność ze specyfikacjami kodowania OAuth, więc próbowałem ręcznie kodować te znaki w moim statusie w ten sam sposób (za pomocą kodu z RestSharp) przed jego wprowadzeniem, np .:
var status = "I'm NOT fine with posting this status.";
string[] UriRfc3986CharsToEscape = new[] { "!", "*", "'", "(", ")" };
string[] UriRfc3968EscapedHex = new[] { "%21", "%2A", "%27", "%28", "%29" };
for (var i = 0; i < UriRfc3986CharsToEscape.Length; i++)
status = status.Replace(UriRfc3986CharsToEscape[i], UriRfc3968EscapedHex[i]);
Ale to też nie działa (nadal otrzymuję błąd uwierzytelnienia).
Co tak naprawdę jest problemem i co należy zrobić, aby poprawnie zakodować status? Czy to jest błąd RestSharp?
Czy znalazłeś rozwiązanie lub obejść? Próbuję rozwiązać to teraz. –
@Michael_B Nie, przepraszam: zacząłem zaglądać w to, ale nie dotarłem zbyt daleko, zanim inne priorytety staną na drodze. –
Skończyło się na używaniu Linq2Twitter do aktualizacji statusu. Działa z wersją 1 interfejsu API Twittera. Nigdy nie znalazłem sposobu na problemy z OAuth RestSharp. –