views:

364

answers:

2

My app currently uses OAuth to communicate with the Twitter API. Back in December, Twitter upped the rate limit for OAuth to 350 requests per hour. However, I am not seeing this. I am still getting 150 from the account/rate_limit_status method.

I was told that I needed to use the X-RateLimit-Limit HTTP header to get the new rate limit. However, in my code, I do not see that header.

Here is my code...

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();
    }
}

If I inspect the response, I can see that it has a property for Headers, and that there are 16 headers. However, I do not have X-RateLimit-Limit in the list.

Image

Any idea what I am doing wrong?

A: 

Look at the raw response text (e.g., with Fiddler). If the header isn't there, no amount of C# code is going to make it appear. :) From what you've shown, it seems the header isn't in the response.

Update: When I go to: http://twitter.com/account/rate_limit_status.xml there is no X-RateLimit-Limit header. But when I go to http://twitter.com/statuses/public_timeline.xml, it's there. So I think you just need to use a different method.

It still says 150, though!

Craig Stuntz
Thanks Craig. The problem is that the `rate_limit_status` is not rate limited. Neither was the method I was using (the `access_token` OAuth Method). If I use a method that is rate limited, like the `public_timeline`, it's there. So it seems that Twitter only sends those header values for methods that are actually rate limited.
Eclipsed4utoo
That almost makes sense!
Craig Stuntz
A: 

You should simple be able to use:

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

If that doesn't work as expected, you can do a watch on response.Headers and see what's in there.

Russ C
Um, he already did that watch. There's a screenshot of it in the post...
Craig Stuntz
Ahh, I couldn't see the link because of Websense on the company firewall :(
Russ C