Pete's information junkyard

Twitter post fix

Elke keer als ik vanuit Willow een twitter post uitvoerde waar unicode characters inzaten, bleek dat er een 401 optrad. Voor het posten gebruik ik een stukje code wat ik van het net heb afgeplukt. Helaas ben ik het url kwijt waar het vandaan kwam. Na wat onderzoek blijkt dat de tool de postdata opnieuw op een eigen manier urlencoded. Niks mis mee, lijkt, maar het bleek dat de door de code zelf al ge-urlencode bij het decoderen niet helemaal goed ging. Na dit aangepast te hebben, wordt de data wel goed omgezet, maar kreeg ik nog steeds een 401.

Na wat verder gegoogled te hebben, kwam ik bij een gemelde issue voor een ruby library, waarin een oplossing leek te zijn, dat voor het urlencoden (escaping is ook wel een benaming trouwens) eerst de characters naar utf8 omgezet moet worden, voordat het geescaped wordt.

protected string unreservedChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~";

public string UrlEncode(string strval) {
StringBuilder result = new StringBuilder();

UTF8Encoding enc = new UTF8Encoding(false, false);

foreach (char symbol in strval) {
if (unreservedChars.IndexOf(symbol) != -1) {
result.Append(symbol);
} else {
// we should first encode to utf8 and then escape the
byte[] buffer = enc.GetBytes(new char[] { symbol });
foreach (byte b in buffer)
result.Append(String.Format("%{0:X2}", b));

}
}

return result.ToString();
}

In de code wordt het character wat niet in de lijst van unreservedChars staat, naar een utf8 byte array omgezet, die vervolgens ge-escaped wordt. Dit getest, en... het werkt! Dus fixed in rev. 3967.

Created on 29-09-2011






stopsoftwarepatents.eu petition banner