mynologin
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору audi6b44 Я разве сказал, что не надо слать GET-запрос? Я сказал, что глупо полностью скачивать весь ответ на этот запрос, не проверив, какого он типа. Собственно запрос высылается вызовом HttpSendRequest. В пределах этого вызова система скачивает заголовок http-ответа, поля которого (включая CONTENT_LENGTH и CONTENT_TYPE) можно получить вызовом HttpQueryInfo. Из указанных двух полей USD получает только CONTENT_LENGTH, игнорируя CONTENT_TYPE. После этого USD в цикле вызывает InternetReadFile, докачивая http-ответ, частью которого и является содержимое файла. Всё это делается в пределах того стороннего компонента. Правильно было бы проверить CONTENT_TYPE и, если он равен "application/octet-stream", то считать, что получена прямая ссылка на искомый файл, а не на html-страничку. Цитата: если я обратился к серверу этими функциями и получаю в ответ файл типа application/octet-stream, то мне не остаётся ничего кроме как закрыть соединение | Вам, как кому? Как USD или как плагину? Если первое, то, как я уже сказал, не рвать соединение надо, а докачивать данные, как искомый файл. Разумеется, асинхронно с потоком, обрабатывающим GUI. Если второе, то как плагин, имеющий некоторую ссылку, Вы не должны просить USD после GET-запроса скачивать синхронно с GUI весь ответ целиком, а только заголовок. После получения заголовка, Вы должны посмотреть, какой тип данных содержит http-ответ. И вот если в заголовке http-ответа Вы видите CONTENT_TYPE "application/octet-stream", тогда сообщаете USD, что это прямая ссылка. Если же USD не предоставляет интерфейсы для проверки полей http-ответа, то это, разумеется, дефект всей архитектуры USD, а не плагина. |