MtGox http api «торгует с» запросы продолжают истекать по тайм-ауту

я написал простую функцию для извлечения сделок из mtgox со следующим вызовом HTTP API:

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

задокументировано здесь: https://en.bitcoin.it/wiki/MtGox/API/HTTP/v1#Multi_currency_trades

вот функция:

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

я начинаю с tid=0, чтобы получить данные с самого начала. он отлично работает для 5 запросов и ответов. но затем следующая строка выдает «System.Net.WebException», говоря, что «время ожидания операции истекло»:

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

это исключение продолжает выдаваться, даже если я поймаю его и повторю попытку. всегда ровно 5 запросов.

в то время как он терпит неудачу в течение нескольких минут, я пробую 6-й запрос в браузере, и он работает просто отлично, в то время как функция продолжает давать сбой.

странно то, что он работает на 5 запросов каждый раз, когда я запускаю приложение. в настоящее время я всегда начинаю с идентификатора сделки 0 (tid=0).

я увеличил Sleep() между запросами до 2 минут, но он по-прежнему ведет себя так же.

если я изменю URL-адрес на https://www.google.com , время ожидания не истечет.

есть идеи, что может быть не так?

Ответы (1)

MtGox использует CloudFlare для защиты от DDOS. Возможно, ваш IP заблокирован.

Откройте тикет на MtGox и сообщите им свой IP... скорее всего, они могут внести его в белый список.

я только что попробовал это с другого ip с режимом сна, установленным на 2 минуты. все равно возникает та же проблема
Возможно, это встроенные ограничения для этого API. Попробуйте использовать веб-сокеты
встроенные ограничения не объясняют, почему он все еще работает в моем браузере. WebSockets потребует много изменений (я использую Visual Studio 2008).
Запустите fiddler и сравните, что происходит (useragent и т.д.)