Sto provando a pubblicare uno stato di Twitter dalla mia app Web, utilizzando RestSharp. Il seguente codice funziona perfettamente:API RestSharp e Twitter 1.1: Come faccio a urlare correttamente il testo dell'aggiornamento di stato?
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);
Tuttavia, questo codice non riesce con un errore di autenticazione se includo uno qualsiasi dei seguenti caratteri nel testo di stato: ! * ' ()
Attraverso un sacco di forum pesca a strascico, ho Abbiamo dedotto che questo è qualcosa a che fare con la codifica della firma OAuth che non corrisponde alla codifica dei parametri POST. Ho trovato this question on SO, ma la ricerca dei problemi di RestSharp su GitHub non rivela nulla di utile.
posso vedere some code in the RestSharp source (UrlEncodeRelaxed
) che sembra essere codificante manualmente quel particolare insieme di caratteri per conformarsi alle specifiche di codifica OAuth, quindi ho provato codifica manualmente tali personaggi del mio stato nello stesso modo (con codice preso da RestSharp) prima di passare in, ad esempio:
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]);
Ma questo non funziona neanche (ho ancora ottenere l'errore di autenticazione).
Qual è in realtà il problema qui e cosa dovrei fare per codificare correttamente lo stato? O si tratta di un bug RestSharp?
Hai trovato una soluzione o ci hai provato? Sto cercando di affrontare questo ora. –
@Michael_B No, mi dispiace: ho iniziato a esaminarlo, ma non sono arrivato molto lontano prima che altre priorità si intromettessero. –
Ho finito per usare Linq2Twitter per gli aggiornamenti di stato. Funziona con la v1.1 dell'API di Twitter. Non ho mai trovato un modo per risolvere i problemi di OAuth di RestSharp. –