Как прочитать заголовок HTTP из ответа, используя .NET HttpWebRequest API? - PullRequest
9 голосов
/ 03 марта 2010

Мое приложение в настоящее время использует OAuth для связи с API Twitter. Еще в декабре Twitter поднял ограничение скорости для OAuth до 350 запросов в час. Однако я этого не вижу. Я все еще получаю 150 от метода account / rate_limit_status .

Мне сказали, что мне нужно использовать HTTP-заголовок X-RateLimit-Limit, чтобы получить новое ограничение скорости. Однако в моем коде я не вижу этот заголовок.

Вот мой код ...

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(newURL);
request.Method = "GET";
request.ServicePoint.Expect100Continue = false;
request.ContentType = "application/x-www-form-urlencoded";

using (WebResponse response = request.GetResponse())
{
    using (StreamReader reader = new StreamReader(response.GetResponseStream()))
    {
        responseString = reader.ReadToEnd();
    }
}

Если я проверю response, я вижу, что у него есть свойство для Headers и что существует 16 заголовков. Тем не менее, у меня нет X-RateLimit-Limit в списке.

image
(источник: yfrog.com )

Есть идеи, что я делаю не так?

Ответы [ 2 ]

12 голосов
/ 03 марта 2010

Вы должны просто быть в состоянии использовать:

using (WebResponse response = request.GetResponse())
{
  string limit = response.Headers["X-RateLimit-Limit"];
  ...
}

Если это не сработает, как ожидалось, вы можете посмотреть ответ. Заголовки и посмотреть, что там.

2 голосов
/ 03 марта 2010

Посмотрите на необработанный текст ответа (например, с помощью Fiddler). Если заголовка нет, никакое количество кода на C # не заставит его появиться. :) Судя по тому, что вы показали, заголовок отсутствует в ответе.

Обновление: когда я перехожу к: http://twitter.com/account/rate_limit_status.xml, заголовок X-RateLimit-Limit отсутствует. Но когда я иду к http://twitter.com/statuses/public_timeline.xml,, это там. Поэтому я думаю, что вам просто нужно использовать другой метод.

Это все еще говорит 150, хотя!

...