Я обрадовался, когда наконец получил некоторый код ASP.NET, говорящий с API Twitter, и он отлично работал при тестировании, создавал твиты любой длины в моей учетной записи, упоминал @usernames и даже твитнул 10 раз в минуту для одной и той же учетной записи.,
Но теперь я получаю код состояния HTTP 401 и этот JSON обратно:
{"errors":[{"code":32, "message":"Could not authenticate you."}]}
Ошибки казались почти случайными, пока я что-то не заметил.Кажется, я никогда не использовал пунктуацию ни в одном из моих предыдущих тестов!Теперь твиты с апострофами, скобками и восклицательными знаками отклоняются, но запятые, дефисы и вопросительные знаки в порядке.
Первая строка этого раздела должна быть моей проблемной областью:
Dim postBody = "media_ids=" & TwitterMediaID & "&status=" & Uri.EscapeDataString(TextOfTheTweet)
System.Net.ServicePointManager.Expect100Continue = False
Dim request As System.Net.HttpWebRequest = System.Net.WebRequest.Create(TwitterStatusPostURL)
request.Headers.Add("Authorization", OAuthSignature)
request.Method = "POST"
request.ContentType = "application/x-www-form-urlencoded"
Я думаю, Uri.EscapeDataString()
- неправильный выбор кодировки, хотя я очень благодарен оригинальному автору за этот код, потому что я был бы никуда без них!
Эта функция принимает Apotrophe' exclamation! brackets() question? fullstop. comma, colon: semicolon; hyphen-
и возвращает Apotrophe'%20exclamation!%20brackets()%20question%3F%20fullstop.%20comma%2C%20colon%3A%20semicolon%3B%20hyphen-
, что явно не то, что хочет видеть Твиттер (или, скорее, это как-то связано с OAuth?).
Согласно замечательная таблица в этом вопросе нет ничего, что кодирует восклицательный знак?!
Я должен быть в состоянии найти лучшую функцию для использования самостоятельно, но я бы хотел услышатьименно в чем проблема была здесь, и я уверен, что я понимаю, какие функции кодирования подходят для какой работы.Это также должно быть задокументировано для будущих программистов с пунктуацией.
Таким образом, вопрос можно сформулировать так: Почему эта функция не является правильным выбором, и что мы должны использовать? Спасибо.