Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > C/C++: Сетевое программирование > WinInet: узнать имя файла, возвращаемого по ссылке |
Автор: mitrich 17.04.16, 09:20 |
Использую функции WinInet для скачивания файлов по HTTP. Хочется уметь узнавать имя файла, возвращаемого по ссылке. Например, браузер при скачивании http://www.jrsoftware.org/download.php/is-unicode.exe?site=1 как-то определяет, что файл называется innosetup-5.5.9-unicode.exe. Пробовал HttpQueryInfo с разными параметрами - ничего нет, вытащил весь заголовок параметром HTTP_QUERY_RAW_HEADERS_CRLF - вернуло следующее: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> HTTP/1.1 200 OK Date: Sun, 17 Apr 2016 08:56:07 GMT Server: Apache/2.2.21 (Unix) mod_ssl/2.2.21 OpenSSL/0.9.8e-fips-rhel5 PHP/5.2.14 Last-Modified: Wed, 06 Apr 2016 14:39:40 GMT ETag: "135807a-245450-52fd1ee864300" Accept-Ranges: bytes Content-Length: 2380880 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: application/octet-stream ...и ничего похожего на имя файла тут нет Как говорится, ЧЯДНТ? |
Автор: Pacific 18.04.16, 06:59 |
mitrich Так по той ссылке сервер возвращает вот это: Цитата HTTP/1.1 302 Found Date: Mon, 18 Apr 2016 06:57:03 GMT Server: Apache/2.2.21 (Unix) mod_ssl/2.2.21 OpenSSL/0.9.8e-fips-rhel5 PHP/5.2.14 X-Powered-By: PHP/5.2.14 Location: http://files.jrsoftware.org/is/5/innosetup-5.5.9-unicode.exe Content-Length: 0 Content-Type: text/html Proxy-Connection: Keep-Alive Connection: Keep-Alive Age: 0 И уже при запросе files.jrsoftware.org/is/5/innosetup-5.5.9-unicode.exe тебе возвращается ответ, который в твоем посте. |
Автор: mitrich 18.04.16, 08:21 |
Ясно. WinInet слишком много на себя берет. То есть мне видимо надо: 1. Вызывать HttpOpenRequest с флагом INTERNET_FLAG_NO_AUTO_REDIRECT 2. Обрабатывать возвращаемые коды 301, 302, 303 3. Переходить по адресу в поле Location 4. И вообще, переписать всё на WinHTTP Сейчас попробую... |