Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.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 :)
Сейчас попробую...

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)