我用wininet
(带有一个名为inetc
的nsis插件)来下载文件。解决url重定向的文件名
我想用文件名保存在url中使用的文件名,例如http://some.domain.com/myfile.doc
应该保存为myfile.doc
。问题是当我有一个重定向的网址。例如,我可以得到http://some.domain.com/
,它重定向到http://some.domain.com/myfile.doc
,我想将它保存为myfile.doc
。
我该如何解决这个问题?
我用wininet
(带有一个名为inetc
的nsis插件)来下载文件。解决url重定向的文件名
我想用文件名保存在url中使用的文件名,例如http://some.domain.com/myfile.doc
应该保存为myfile.doc
。问题是当我有一个重定向的网址。例如,我可以得到http://some.domain.com/
,它重定向到http://some.domain.com/myfile.doc
,我想将它保存为myfile.doc
。
我该如何解决这个问题?
INetC是不是真的设计为支持这一点,但我想你可以在一个循环中调用INetC::head
和解析返回的头,直到它不再是一个重定向...
编辑:
由于INetC仅用于处理由它只依赖高级WinInet默认处理的调用者指定的文件。
尽管可能修改INetC或创建一个新插件,但让服务器完成工作可能不太方便。它可以返回INetC :: head可以下载的content-disposition标题或者一个特殊的URL,例如server.com/?getname,它只是返回名称,所以你首先用INetC :: get获取名称,然后执行真实的INetC ::得到正确的目标文件名...
感谢您的回答。我试过了,但是我没有在头文件中找到与重定向有关的任何东西 - 你能详细说明一下吗?这是我得到的标题的示例:HTTP/1.1 200 OK 接受范围:字节 内容类型:application/octet-stream ETag:“985a0576bbccd1:0” 最后修改时间:星期二,十一月06 2012 22:09:08 GMT 服务器: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'仍然在做所有的重定向。 – zenpoy
WinINet同时具有HTTP_QUERY_CONTENT_LOCATION和INTERNET_FLAG_NO_AUTO_REDIRECT,但我猜测INetC没有公开使用它们的方式 – Anders
它不公开,但这并不意味着我不能暴露他们:)感谢指针,与他们同时我也得到'INTERNET_OPTION_URL'。我将这个功能添加到inetc中,并将它发布到nsis论坛的线程上(如果它能解决我的问题,当然)。 – zenpoy