MtGox http api "Trades Since"-Anforderungen werden immer wieder zeitlich überschritten

Ich habe eine einfache Funktion geschrieben, um Trades von mtgox mit dem folgenden HTTP-API-Aufruf abzurufen:

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

hier dokumentiert: https://en.bitcoin.it/wiki/MtGox/API/HTTP/v1#Multi_currency_trades

hier die funktion:

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

Ich fange bei tid=0 an, um die Daten von Anfang an zu erhalten. es funktioniert gut für 5 Anfragen und Antworten. aber dann wirft die folgende Zeile eine "System.Net.WebException" und sagt, dass "The operation has timed out":

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

Diese Ausnahme wird immer wieder ausgelöst, auch wenn ich sie fange und es erneut versuche. es ist immer genau bei 5 Anfragen.

Während es seit ein paar Minuten fehlschlägt, versuche ich die 6. Anfrage im Browser und es funktioniert einwandfrei, während die Funktion weiterhin fehlschlägt.

Das Seltsame ist, dass es jedes Mal, wenn ich die Anwendung starte, für 5 Anfragen funktioniert. derzeit beginne ich immer bei trade id 0 (tid=0).

Ich habe das Sleep() zwischen Anfragen auf 2 Minuten erhöht, aber es verhält sich immer noch gleich.

Wenn ich die URL in https://www.google.com ändere , kommt es nicht zu einer Zeitüberschreitung.

Irgendwelche Ideen, was falsch sein könnte?

Antworten (1)

MtGox verwendet CloudFlare für den DDOS-Schutz. Es ist möglich, dass Ihre IP blockiert wird.

Eröffnen Sie ein Ticket bei MtGox und teilen Sie ihnen Ihre IP mit ... sie werden sie wahrscheinlich auf die Whitelist setzen.

Ich habe es gerade von einer anderen IP mit Sleep auf 2 Minuten versucht. es tritt immer noch das gleiche Problem auf
Dies könnten die eingebauten Limits sein, die sie für diese API haben. Versuchen Sie es mit WebSockets
Eingebaute Limits erklären nicht, warum es in meinem Browser immer noch funktioniert. WebSockets würde viele Änderungen erfordern (ich verwende Visual Studio 2008).
Starten Sie Fiddler und vergleichen Sie, was passiert (Useragent usw.)