2012-11-08 52 views
0

我用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

我该如何解决这个问题?

回答

1

INetC是不是真的设计为支持这一点,但我想你可以在一个循环中调用INetC::head和解析返回的头,直到它不再是一个重定向...

编辑:

由于INetC仅用于处理由它只依赖高级WinInet默认处理的调用者指定的文件。

尽管可能修改INetC或创建一个新插件,但让服务器完成工作可能不太方便。它可以返回INetC :: head可以下载的content-disposition标题或者一个特殊的URL,例如server.com/?getname,它只是返回名称,所以你首先用INetC :: get获取名称,然后执行真实的INetC ::得到正确的目标文件名...

+0

感谢您的回答。我试过了,但是我没有在头文件中找到与重定向有关的任何东西 - 你能详细说明一下吗?这是我得到的标题的示例: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

+0

WinINet同时具有HTTP_QUERY_CONTENT_LOCATION和INTERNET_FLAG_NO_AUTO_REDIRECT,但我猜测INetC没有公开使用它们的方式 – Anders

+0

它不公开,但这并不意味着我不能暴露他们:)感谢指针,与他们同时我也得到'INTERNET_OPTION_URL'。我将这个功能添加到inetc中,并将它发布到nsis论坛的线程上(如果它能解决我的问题,当然)。 – zenpoy