C# - 通过截取网络流量获取下载文件大小?

时间:2017-02-13 19:32:10

标签: c# web-services

我想在下载之前或者最初启动时检测文件的文件大小(以字节为单位)。棘手的部分是我使用第三方SDK与Web服务进行交互。他们没有提供获取文件大小的方法。我想知道是否有可能拦截后期响应以确定总文件大小?可能是在黑暗中拍摄..

        public void getExport(string jid, bool compression)
    {
        bool comp = false;
        while (comp == false)
        {
            comp = _eb.IsComplete(jid);
        }

        //capture filesize of download & report back???????????

        byte[] b = this._eb.Retrieve(jid, compression);

        this._eb.Delete(jid);
        this._ws.Destroy();

        this._export = b;

    }

在上面的脚本中,我已经构建了一个导出,它在服务器上保存为Job。此过程返回作业ID或jid。然后,该脚本通过将jid传递给retrieve方法来启动下载。这将返回一个byte []。由于他们不提供此功能,我可以将所有这些包含在内,以便我可以适当地更新进度条。

1 个答案:

答案 0 :(得分:2)

您可以使用http中的HEAD VERB获取资源的元数据

例如,如果您要在以下位置下载.pdf文件

您使用以下命令

HEAD“https://www.depts.ttu.edu/upwardbound/books/the-7-habits-ofhighly-effective-people.pdf

如果您看到内容长度将指定要下载的文件大小,则不会下载该文件将返回以下信息。

Accept-Ranges→字节 内容长度→777476 内容类型→application / pdf 日期→星期一,2017年2月13日20:32:29 GMT ETag→“9a3a29bac9ecd11:0” Last-Modified→周二,2016年8月2日14:25:32 GMT 服务器→Microsoft-IIS / 7.5 X-Powered-By→ASP.NET

你可以使用像POSTMAN这样的工具来检查这个

www.getpostman.com

此处还阅读了HEAD VERB

www.w3.org/Protocols/rfc2616/rfc2616-sec9.html