Просто попробуйте получить токен доступа к API Twitter с помощью программы C# .net. Я сочинил запрос HTTP POST следующим образом (выезд из заявления на вылов для экономии места):.net twitter api Отсутствует необходимый параметр: grant_type: forbidden_missing_parameter
HttpWebRequest request;
request = (HttpWebRequest)WebRequest.Create("https://api.twitter.com/oauth2/token");
request.Method = "POST";
request.Host = "api.twitter.com";
request.UserAgent = "Dev Site";
request.Headers.Set("Authorization", "Basic " + credentialBase64);
request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
//request.Headers.Set("Accept-Encoding", "gzip");
try
{
WebResponse response = (HttpWebResponse)request.GetResponse();
Stream dataStream = response.GetResponseStream();
byte[] requestBody = ASCIIEncoding.ASCII.GetBytes(HttpUtility.UrlEncode("grant_type=client_credentials"));
request.ContentLength = requestBody.Length;
dataStream.Write(requestBody, 0, requestBody.Length);
StreamReader reader = new StreamReader(dataStream);
twitterString = reader.ReadToEnd();
}
Twitter апи посылает обратно ответ: {"errors":[{"code":"170","message":"Missing required parameter: grant_type","label":"forbidden_missing_parameter}]}
Я понимаю, что значит ошибка. Это говорит мне, что я не включаю контент-корпус grant_type=client_credentials
. Но, как вы видите, я посылаю этот контент-тело с помощью метода Stream.Write
.
Сначала я предположил, что это потому, что строка не была UrlEncoded, возможно, ей нужна обратная косая черта перед значком равенства или чем-то еще. Поэтому я UrlEncoded строки, чтобы убедиться. Я думаю, что он все равно должен быть в неправильном формате, но я не уверен, как это сделать.
Почему Twitter не получает контент-тело, которое я им посылаю?
Обновление: Я принял совет @Linvi и скопировал именно формат статьи по адресу How to set the content of an HttpWebRequest in C#?. Вот мой текущий код:
byte[] buffer = ASCIIEncoding.ASCII.GetBytes(HttpUtility.UrlEncode("grant_type=client_credentials"));
var webReq = (HttpWebRequest)WebRequest.Create("https://api.twitter.com/oauth2/token");
webReq.Method = "POST";
webReq.Host = "api.twitter.com";
webReq.Headers.Set("Authorization", "Basic " + credentialBase64);
webReq.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
webReq.ContentLength = buffer.Length;
var reqStream = webReq.GetRequestStream();
reqStream.Write(buffer, 0, buffer.Length);
reqStream.Close();
var webResp = (HttpWebResponse)webReq.GetResponse();
Я до сих пор получаю ответ «403» в формате: {"errors":[{"code":"170","message":"Missing required parameter: grant_type","label":"forbidden_missing_parameter}]}
.
Я тестировал это с помощью локальной программы, которая просматривает тело контента, и оно выходит нулевым. Я не могу понять, почему мое содержание не написано.
Возможный дубликат [Как установить содержание в HttpWebRequest в C#?] (Http://stackoverflow.com/questions/5527316/how-to-set-the-content-of-the-httpwebrequest-in-c) – Linvi