MtGox http api "intercambios desde" las solicitudes siguen agotando el tiempo de espera

Escribí una función simple para recuperar transacciones de mtgox con la siguiente llamada a la API HTTP:

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

documentado aquí: https://en.bitcoin.it/wiki/MtGox/API/HTTP/v1#Multi_currency_trades

aquí está la función:

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

estoy comenzando en tid=0 para obtener los datos desde el principio. funciona bien para 5 solicitudes y respuestas. pero luego la siguiente línea arroja una "System.Net.WebException", que dice que "La operación se agotó":

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

esta excepción se sigue lanzando incluso si la atrapo y vuelvo a intentarlo. siempre es exactamente en 5 solicitudes.

aunque ha estado fallando durante un par de minutos, intento la sexta solicitud en el navegador y funciona bien mientras la función continúa fallando.

lo extraño es que funciona para 5 solicitudes cada vez que inicio la aplicación. Actualmente, siempre empiezo en el ID comercial 0 (tid=0).

Aumenté Sleep() entre solicitudes a 2 minutos, pero aún se comporta igual.

si cambio la URL a https://www.google.com , no se agota el tiempo de espera.

¿Alguna idea de lo que podría estar mal?

Respuestas (1)

MtGox usa CloudFlare para la protección DDOS. Es posible que tu IP esté siendo bloqueada.

Abra un ticket con MtGox y dígales su IP... es probable que lo incluyan en la lista blanca.

Acabo de probarlo desde una IP diferente con el modo de suspensión establecido en 2 minutos. sigue dando el mismo problema
Estos podrían ser los límites incorporados que tienen para esta API. Intenta usar WebSockets
Los límites incorporados no explican por qué todavía funciona en mi navegador. WebSockets requeriría muchos cambios (estoy usando Visual Studio 2008).
Inicie Fiddler y haga una comparación de lo que está sucediendo (agente de usuario, etc.)