问题标签 [urlmon]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 如何在 IE8 盒子上使用 URLDownloadToFile(没有崩溃会很好)?
我有一个 C++ 应用程序(类似于这个),它使用URLDownloadToFile
方法(在 urlmon.dll 中定义)下载文件。E_ABORT
在 IE8 之前,可以通过在进度回调中返回来中止下载。
在安装了 IE8 的系统上,这样做会使程序崩溃,并生成错误报告。
有谁知道取消通过 启动的下载的任何替代方法URLDownloadToFile
?
internet-explorer - 如何使用 Url Monikers 或其他方法在 IE 中更改 Accept-Encoding 标头?
我正在开发一个浏览器插件和服务器组件系统,它使用自定义编码类型流式传输内容。现在我希望能够在服务器端检测客户端是否可以处理特殊编码,并希望使其与使用 HTTP 的通常方式保持一致,所以我想从浏览器插件中添加一个新的Accept-Encoding 请求标头中的编码。IE:
接受编码:gzip、deflate、myencoding
我已经尝试实现 IHttpNegotiate 并将其设置为BeginningTransaction 中的附加标头,但它似乎要么忽略它,要么稍后被覆盖。
c++ - URLDownloadToFile 和身份验证
我正在研究一些旧的 ATL OCX,它被用作“下载管理器”。它使用URLDownloadToFile API下载文件。
以前,它在网页上托管为 ActiveX,因此如果服务器需要身份验证,则由 IE 完成。现在它是可执行文件的一部分,所以它应该负责身份验证。假设用户提供了用户名和密码,我实际上如何进行“身份验证”?我需要支持IIS 的简单 Web 身份验证和NTLM。
对于简单的 Web 身份验证,我发现在 URL 之前传递用户名/密码可以正常工作。但我不确定这是否是正确的方法。
请指教 谢谢Zaky
c++ - 使用和 URLDownloadToFile 获取 HTTPS Web 资源
全部,
我正在编写一个能够从本地网络内外的各种网站下载内容的程序。为此,出于兼容性原因,我必须使用 libs 和 c++。到目前为止,我已经能够成功访问正常的 HTTP 页面和 Web 上的 HTTPS 页面。例子:
我无法做两件事:1)访问使用本地 CA 证书的本地网络资源。
2) 访问本地网络资源,该资源使用本地 CA 证书并通过客户端证书请求客户端身份验证。
在第一种情况下,我认为 Windows 不允许连接,因为它不在受信任 CA 的 Windows 列表中。
在第二个中,我认为我需要想办法将客户端证书/私钥集成到对 URLDownloadToFile 的调用中,但我不知道如何实现这一点。此外,我还必须告诉 Windows 信任本地 CA。
任何帮助,将不胜感激。
c++ - URLOpenPullStream 和 gzip 内容下载 - 需要未压缩的数据
我正在使用 URLOpenPullStream 以及 IBindStatusCallback 和 IHttpNegotiate 回调来处理协商、状态和数据消息。我遇到的问题是内容是 gzip(例如 Content-Encoding: gzip)。我通过 OnDataAvailable 接收的数据是压缩的。我需要未压缩的数据。我正在使用 BINDF_PULLDATA | BINDF_GETNEWESTVERSION | BINDF_NOWRITECACHE 绑定标志。我读过一些帖子说它应该支持 gzip 格式。
我最初尝试更改 Accept-Encoding 请求标头以指定我不想要 gzip 但没有成功。我可以在BeginningTransaction 中更改或添加标头,但无法更改Accept-Content。我能够更改 User-Agent,并且能够添加新的标头,因此该过程有效,但由于某种原因它不会覆盖 Accept-Content。
其他选择是自己解压缩数据。在使用 C++ gzip 库的快速测试中,我能够解压缩内容。所以,这可能是一种选择。如果这是我需要做的,那么检测它的最佳方法是 gzip。我注意到我收到了一个带有 BINDSTATUS_MIMETYPEAVAILABLE 的 OnProgress 事件,并且文本设置为“application/x-gzip-compressed”。这是我应该如何检测它吗?
寻找任何解决方案来解决这个问题!我确实想继续使用 URLOpenPullStream。这是一个已发布的产品,希望将更改保持在最低限度。
c++ - 等待 URLDownloadToFile() 结束
我想制作从互联网下载页面并对其进行一些解析的程序。第二部分很容易,问题是第一。
我想使用 URLDownloadToFile() 函数。但默认情况下,它不会等待完成下载。MSDN 说最后一个参数是一种回调函数,但我找不到有关如何使用它的任何信息(何时调用它以及它必须做什么,甚至它是什么类型的函数)。有人可以解释一下最后一个参数是什么以及如何使用它(在 C++ 中)让我的应用程序等待吗?
c# - 为什么 FindMimeFromData 可以识别一台主机上的图像/tiff,但不能识别另一台主机上的图像/tiff?
我使用FindMimeFromData
fromurlmon.dll
来嗅探上传文件的 MIME 类型。根据Internet Explorer 中的 MIME 类型检测,image/tiff
是公认的 MIME 类型之一。它在我的开发机器(Windows 7 64bit,IE9)上运行良好,但在测试环境(Windows Server 2003 R2 64bit,IE8)上不起作用 - 它返回application/octet-stream
而不是image/tiff
.
上面的文章描述了确定 MIME 类型的确切步骤,但由于image/tiff
它是 26 种可识别类型之一,它应该在第 2 步(嗅探实际数据)结束,以便文件扩展名和注册应用程序(以及其他注册表内容)应该没关系。
哦,顺便说一下,TIFF 文件实际上与测试服务器上的一个程序(Windows 图片和传真查看器)相关联。并不是说 Windows 注册表中没有对 TIFF 的任何引用。
任何想法为什么它不能按预期工作?
编辑: FindMimeFromData 是这样使用的:
然后这样调用:
c# - 如何在 Visual Basic 6.0 中做“公开声明 Ansi 函数”?
我正在尝试将此 VB.NET / C# 声明转换为 Visual Basic 6.0,但遇到了问题(包括 C# 版本,转换为 VB.NET 没问题):
如您所见,在 Visual Basic/C# 中,我们有那CharSet=CharSet.Ansi
部分,我不知道如何在 Visual Basic 6.0 中执行此操作 - 我尝试在别名名称末尾添加 A ... Alias "UrlMkSetSessionOptionA"
...但这并没有不行(说can't find DLL entrypoint in urlmon.dll
)。没有这个,发送到 pBuffer 的字符串就会变成乱码(我无法识别的奇怪字符)。
这是我到目前为止所得到的......
delphi - Delphi XE2 winapi.urlmon.CoInternetSetFeatureEnabled 未找到?
我正在尝试禁用 twebbrowser 控件中导航声音的恼人点击,但我似乎看不到 winapi.urlmon。CoInternetSetFeatureEnabled 在任何地方?
c# - urlmon.dll FindMimeFromData() 在 64 位桌面/控制台上完美运行,但在 ASP.NET 上生成错误
我正在创建一个实用程序库,可在 Web 环境中的桌面环境中使用。
它包含几个我认为在我的应用程序中经常重复的功能,包括通过文件内容(而不是扩展名)获取文件的 mime 类型的实用程序。
我必须检查的文件是最常见的(jpg、png、pdf、txt),所以我选择使用外部方法FindMimeFromData
(上面的链接)
使用 .NET,如何根据文件签名而不是扩展名找到文件的 mime 类型
该方法效果很好,除了 JPG ( image/pjpg
) 和 PNG ( image/x-png
) 这两种不正确的 mime 类型,通过在 return 语句之前进行检查很容易解决。
该库是为平台 AnyCPU 编译的,因为它必须安装在 32 位和 64 位的服务器/客户端上。
在桌面环境中进行测试时,所有为 x86 和 x64 编译的应用程序都可以正常工作。
在测试 ASP.NET 应用程序(一个带有用于测试的 http 处理程序的空站点)时,出现 HRESULT 类型的错误,调试器告诉我它无法提供更多信息。
经过一些测试配置,包括将池的身份更改为本地系统(没有结果),我发现了问题:
池应该允许 32 位应用程序(见上图)。
为什么?
是不是应该加载urlmon.dll
我们现在所在的64位系统的dll?
这是一个大问题,因为该FindMimeFromData
方法可以在这个库的任何地方调用:
结果是另一个实用程序方法调用此方法可能会引发此异常,并且很难通过调试来跟踪问题。
有什么想法/经验吗?
用于测试的操作系统
桌面:
- Windows 8 x64 -工作
- Windows 7 x64 -工作
- Windows Server 2008 Standard R2 x64 -有效
- Windows Server 2008 标准 x86 -有效
- Windows Server 2003 标准 x86 -有效
- Windows XP Professional SP3 -有效
网站:
- Windows 8 x64 -发现第一个错误,仅适用于启用 32 位应用程序
- Windows Server 2008 Standard R2 x64 -已确认错误,仅适用于启用 32 位应用程序
- Windows Server 2008 标准 x86 -有效
编辑2(问题已解决)
由Noseratio解决:
正确的参数类型ppwzMimeOut
并且pBC
必须是System.IntPtr
代替System.UInt32
.
我知道这System.UInt32
会导致完整的 64 位网络应用出现问题,但我不知道为什么。
如果有人知道这些问题的原因,可以在评论中更好地解释吗?
提前致谢