Я подключаюсь к сайту Skyview (https://skyview.gsfc.nasa.gov/current/cgi/basicform.pl) для получения астрономических табличек (т.е. изображений).
Я создаю URL с необходимыми параметрами и создаю запрос HttpWebRequest:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
Поскольку это https Я ранее вставил эти строки, как я видел в другой теме здесь, в SO:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
Затем я прочитал ответ сайта следующим образом:
List<string> resp = new List<string>();
const int BUFFER_SIZE = 1000;
{
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
int bytesRead;
do
{
var buffer = new byte[BUFFER_SIZE];
bytesRead = responseStream.Read(buffer, 0, BUFFER_SIZE);
resp.Add(Encoding.ASCII.GetString(buffer));
} while (bytesRead > 0);
}
}
}
После того, как сайт ответил:
- Я анализирую результат (соответственно)
- найти имя файла в нем
- doеще один запрос на получение
Все отлично работает, если размер планшета не большой: сайт занимает всего несколько минут (менее 5), чтобы создать файл планшета, и я могу получить его правильно.
Когда я указываю большие поля, Skyview требуется больше времени для получения изображения и отправки мне URL-адреса файла, и примерно через 300 секунд я получаю эту ошибку:
Невозможно прочитать данные изтранспортное соединение: существующее соединение было принудительно закрыто
Если я делаю это через браузер, он работает. Я протестировал довольно большое изображение, и это заняло 21 минуту без каких-либо ошибок.
Я рассмотрел некоторые решения здесь, в SO, но, похоже, они не работают для моего случая.