1

i wrote a simple function to retrieve trades from mtgox with following HTTP API call:

https://data.mtgox.com/api/1/BTCUSD/trades?since

documented here: https://en.bitcoin.it/wiki/MtGox/API/HTTP/v1#Multi_currency_trades

here's the function:

string GetTradesOnline(Int64 tid)
{
    Thread.Sleep(30000);

    // communicate
    string url = "https://data.mtgox.com/api/1/BTCUSD/trades?since=" + tid.ToString();
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    StreamReader reader = new StreamReader(response.GetResponseStream());

    string json = reader.ReadToEnd();
    return json;
}

i'm starting at tid=0 to get the data from the very beginning. it works fine for 5 requests & responses. but then the following line throws a "System.Net.WebException", saying that "The operation has timed out":

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

this exception keeps being thrown even if i catch it and retry. it's always exactly at 5 requests.

while it has been failing for a couple of minutes, i try the 6th request in the browser and it works just fine while the function continues to fail.

the strange thing is that it works for 5 requests everytime i start the application. currently, i always start at trade id 0 (tid=0).

i've increased the Sleep() inbetween requests to 2 minutes but it still behaves the same.

if i change the url to https://www.google.com, it doesn't timeout.

any ideas of what could be wrong?

1 Answer 1

1

MtGox uses CloudFlare for DDOS protection. It's possible that your IP is being blocked.

Open a ticket with MtGox and tell them your IP... they may likely whitelist it.

4
  • i just tried it from a different ip with sleep set to 2 minutes. still the same problem occurs
    – symbiont
    Commented May 22, 2013 at 21:43
  • This might be the built in limits they have for this API. Try using WebSockets Commented May 22, 2013 at 21:47
  • built in limits doesn't explain why it still works in my browser. WebSockets would require a lot of changes (i'm using visual studio 2008).
    – symbiont
    Commented May 25, 2013 at 15:26
  • Launch fiddler and do a comparison of what's happening (useragent etc) Commented May 25, 2013 at 16:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.