Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.109.119] |
|
Сообщ.
#1
,
|
|
|
Использую функции 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 - вернуло следующее:
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 ...и ничего похожего на имя файла тут нет Как говорится, ЧЯДНТ? |
Сообщ.
#2
,
|
|
|
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 тебе возвращается ответ, который в твоем посте. |
Сообщ.
#3
,
|
|
|
Ясно. WinInet слишком много на себя берет. То есть мне видимо надо:
1. Вызывать HttpOpenRequest с флагом INTERNET_FLAG_NO_AUTO_REDIRECT 2. Обрабатывать возвращаемые коды 301, 302, 303 3. Переходить по адресу в поле Location 4. И вообще, переписать всё на WinHTTP Сейчас попробую... |