Разрешить имя файла при перенаправлении URL

Я использую wininet (с плагином nsis под названием inetc) для загрузки файла.

Я хочу сохранить файл с тем же именем файла, которое используется в URL-адресе, например, http://some.domain.com/myfile.doc следует сохранить как myfile.doc. Проблема в том, что у меня есть URL-адрес с перенаправлением. Например, я могу получить http://some.domain.com/, который перенаправляет на http://some.domain.com/myfile.doc, и я хочу сохранить его как myfile.doc.

Как решить эту проблему?


person zenpoy    schedule 08.11.2012    source источник
comment
stackoverflow.com/questions/33647630/ Это полезно   -  person Rakesh Nair    schedule 23.07.2020


Ответы (1)


INetC на самом деле не был разработан для поддержки этого, но я думаю, вы могли бы вызвать INetC::head в цикле и проанализировать возвращенный заголовок, пока он не перестанет быть перенаправлением...

Изменить:

Поскольку INetC предназначен только для работы с файлами, названными вызывающей стороной, он просто полагается на высокоуровневую обработку WinInet по умолчанию.

Хотя можно изменить INetC или создать новый подключаемый модуль, может быть меньше работы, если сервер сделает всю работу. Он может вернуть заголовок content-disposition, который INetC::head может загрузить, или специальный URL-адрес, такой как server.com/?getname, который просто возвращает имя, поэтому вы сначала получаете имя с помощью INetC::get, а затем выполняете настоящий INetC:: получить правильное имя файла назначения...

person Anders    schedule 08.11.2012
comment
Спасибо за Ваш ответ. Я пробовал, но не вижу в заголовках ничего, связанного с перенаправлением. Можете ли вы уточнить? это пример заголовков, которые я получаю: HTTP/1.1 200 OK Accept-Ranges: bytes Content-Type: application/octet-stream ETag: "985a0576bbccd1:0" Last-Modified: Tue, 06 Nov 2012 22:09:08 GMT Server: Microsoft-IIS/7.5 X-Powered-By: ASP.NET Content-Length: 453112 Date: Thu, 08 Nov 2012 20:41:03 GMT Connection: keep-alive ... Я только что проверил его с помощью wireshark, и похоже, что inetc::head все еще выполняет все перенаправления. - person zenpoy; 09.11.2012
comment
WinINet имеет как HTTP_QUERY_CONTENT_LOCATION, так и INTERNET_FLAG_NO_AUTO_REDIRECT, но я думаю, что INetC не предоставляет способ их использования - person Anders; 09.11.2012
comment
Не выставляет, но это не значит, что я не могу их выставлять :) Спасибо за указатели, с ними я тоже добрался до INTERNET_OPTION_URL. Я добавлю этот функционал в inetc и опубликую в теме на форуме nsis (если это, конечно, решит мою проблему). - person zenpoy; 09.11.2012