问题标签 [winhttp]

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.

0 投票
1 回答
2283 浏览

winapi - 如何取消同步的 WinHttp 请求?

WinHttpSendRequest当有人试图停止我的服务时,我的服务有一个线程可能正在执行。

WinHttpCloseHandle文档说:

HINTERNET应用程序可以通过关闭请求句柄来终止正在进行的同步或异步请求WinHttpCloseHandle

但是,后来在相同的文档中似乎与此相矛盾。它说:

应用程序永远不应WinHttpCloseHandle调用同步请求。这可能会产生竞争条件。

我发现这篇博客文章似乎同意我不能打电话WinHttpCloseHandle

我想知道如何取消此操作以便可以正常停止我的服务?我真的不能真正等待WinHttpSendRequest超时,因为它需要很长时间,而且我的服务没有足够快地停止。我认为 Windows 将此报告为错误,然后在关闭时强行终止该服务。

一个想法将不胜感激。

0 投票
1 回答
1426 浏览

c++ - WinHTTP 是在下载空字节还是我错误地复制了结果缓冲区?

我最近将一个完整的 WinInet 程序移植到 WinHTTP。这是我编写的一个函数,用于将整个 GET 请求包装到一行代码中:

该代码的工作原理是下载请求的 URL。当服务器不返回 Content-Length 标头(大多数情况下)时,就会出现问题。该代码仍将下载所有数据,但在转换为字符串时会嵌入空字节。

上面的代码是这样调用的:

StdString 是 typedef std::basic_string<TCHAR> 而 StdOut 是一个使用 cout 或 wcout 的宏,具体取决于是否定义了 UNICODE。

由于嵌入的空值,并非所有响应都显示在控制台上。可以在此处查看我在关闭调试的情况下运行代码时显示的输出(请注意,换行符只是文本在我的控制台中包装的位置)。第一个空值出现在最后的“__in”之后,并且出现在“按任意键继续......”输出显示的地方。这是输出的屏幕截图:

控制台输出

这是 html 变量值的文本可视化器屏幕截图,准确显示了空值相对于可见内容的显示位置:

用于 html 的文本可视化工具

我是否在某处进行了一些糟糕的复制,或者是否存在我不知道的 WinHTTP 细微差别?

0 投票
1 回答
874 浏览

option - WinHttpSetOption 函数的标志整数匹配

在页面http://msdn.microsoft.com/en-us/library/aa384066%28VS.85%29.aspx上有一个 WinHTTPSetOption 对象的选项标志列表。

在哪里可以找到这些常数的整数等价物?(即,根据代码示例http://www.808.dk/?code-simplewinhttprequest , 0 = WINHTTP_OPTION_USER_AGENT)

0 投票
1 回答
6229 浏览

c++ - WinHTTP 异步回调

我的 C++ 不是很好,如果您在代码片段中看到可以更好的东西,请不吝赐教!

我正在以异步方式实现 winhttp。但我无法检索响应。我想不通。因为您应该能够一次解析整个响应。由于可能会发生多个并发请求,因此在全局变量中缓冲响应(标头+正文)不是要走的路。

如何检索 http get 请求的响应?或者,在新线程上执行 winhttp 同步是一个好习惯(所以主循环不会被阻塞,然后在完成后调用函数?):

主要是调用:

0 投票
1 回答
1196 浏览

visual-c++ - 要在 Visual Studio 2003、XP 2003、SP3 中使用 WinHTTP,究竟要安装哪个 SDK?

我的操作系统是 XP 2003,SP 3。我们在 Visual Studio 2003 中有 MS VC++ 代码(不是 .NET)。(现在不是我们升级到更高 Visual Studio 版本的时候。)我想使用 WinHTTP API( winhttp.h) 在我的代码中。我到底需要安装什么 SDK?什么版本?在哪里得到它?

以下网站中显示的任何内容似乎都太新了,不适用于我的环境。

http://msdn.microsoft.com/en-us/windows/bb980924.aspx

我担心任何“错误”的安装可能会破坏我的环境,这会让我们有更多的时间来恢复。

谢谢

0 投票
2 回答
941 浏览

c++ - Ways to speed up termination of socket WinHttp APIs using C++ for Windows

I have a Windows service application written in C++/MFC that establishes an HTTP connection via Windows sockets. It employs WinHttp* APIs to do all the socket related operations. It all works great, except when someone tries to stop/uninstall that service if it's in the process of connecting via the socket (espeically in a situation when such connection could not be established, like, say, if my Internet cable is unplugged) those socket APIs do not return for several seconds before the service can close (obviously, the mechanism inside the service waits for my socket thread to finish "gracefully".)

My question is, if I have an open socket handle, as well connection and request handles (of HINTERNET type), obtained from a call to WinHttpOpen(), WinHttpConnect() and WinHttpOpenRequest(), is there any way to forcefully make any other WinHttp* APIs that may be currently working with the socket to return immediately?

PS. I was thinking to do so from a main thread before it begins waiting for the socket thread to close (before uninstalling/stopping the service.)

0 投票
2 回答
26625 浏览

excel - 使用 WinHTTP 和 Excel 配置代理

我正在使用 WinHTTP 在 Excel VBA 宏中执行 GET 请求。但是,如果我尝试从具有代理的网络中的机器发出请求,它就不起作用。如果我手动配置它,它可以工作,但我认为使用我正在开发的工具的人不会知道他们的代理服务器。

有没有办法自动配置代理服务器,或者从 Windows 获取代理配置?下面是一个示例代码:

在这种情况下,我不想强​​迫用户找到“proxyserver:8080”地址——我想要的是一种自动填充它的方法。

非常感谢。

0 投票
1 回答
4019 浏览

c - WinHTTP 多个异步请求

我需要从网站的大约 6000 个页面中提取数据。在做了一些研究之后,我决定试一试 WinHTTP。我能够让这个工作,但是我正在同步做事情,所以需要一段时间才能完成。我现在正在尝试异步使用 WinHTTP,但遇到了障碍。我搜索了许多教程和示例,但我只能找到 MSDN 文档,这对于我正在做的事情来说似乎过于复杂。如前所述,我找不到很多资源,所以我继续尝试一下:

下面是我的回调函数:

注意:我只提供了我的代码的这一部分,因为它是与我的问题/问题有关的部分。如果缺少变量声明,我深表歉意。

上面的代码对我有用,实际上确实得到了我正在寻找的所需信息,但仅适用于单个页面。到了这一步之后,我意识到当使用这种方法发出多个请求时,我不知道该怎么做。同样,除了 MSDN 文章之外,搜索并没有出现太多,据我所知,这些文章并不是一次发出多个请求的示例。此外,我用来打开/发送/等的 while 循环。基于 theRequest 值的请求似乎是一种糟糕的方式。我也很感激任何其他建议来改进我的代码。

一般来说,这里是我的问题的一个总结:我需要使用 WinHTTP 异步发出大约 6000 个 GET 请求。我不完全确定如何执行此操作,因为我是 WinHTTP 的新手,所以我正在寻找处理多个异步请求的最基本(或可能有效)的方法。

0 投票
1 回答
1851 浏览

c++ - c++ winhttp/wininet wrapper 在没有 mfc/atl 的情况下发布表单和上传文件

有人可以指点我一个不需要 mfc/atl 的基于 winhttp/wininet 的 c++ 包装器吗?这样我就可以让它在 MSVC express 中工作。

我也希望能够通过 HTML 表单使用 GET、POST 和上传文件。

我在 codeproject.com 中检查了几个,但找不到合适的包装器。

有什么可以帮助我的吗?

0 投票
1 回答
1209 浏览

winhttp - WinHttpCrackurl 是如何工作的

WinHttpCrackurl 上的 MSDN 文档强调说它“同步”运行。但是,有人可以提供一些权威文档,说明 WinHttpCrackurl 尝试或不尝试网络连接吗?我搜索无果,并希望避免拆卸该功能。谢谢。