я написал простую функцию для извлечения сделок из 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 , время ожидания не истечет.
есть идеи, что может быть не так?
MtGox использует CloudFlare для защиты от DDOS. Возможно, ваш IP заблокирован.
Откройте тикет на MtGox и сообщите им свой IP... скорее всего, они могут внести его в белый список.
симбионт
производитель вещей7
симбионт
производитель вещей7