问题标签 [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 回答
2409 浏览

php - 未收到 WinHttp POST 正文

我正在将带有 POST 数据的 WinHttp 请求发送到 IIS7 服务器上的 php 脚本,并且服务器没有接收到 POST 正文。如果我使用 GET 通过 WinHttp 发送,或者带有 NULL 正文的 POST,或者通过使用带有正文的 POST 的 HTML 表单,一切都会按预期工作。

下面是一些简单的代码,显示了带有和不带有主体的 WinHttp POST 调用之间的区别:

没有身体:

有身体:

所以唯一的区别是正文参数和内容类型标头。真正奇怪的是,这可能会工作 20 次中的 1 次,但通常服务器不会接收到正文并且它会超时。这里有什么明显的错误吗?

0 投票
1 回答
590 浏览

c++ - 是否有用于获取代理用户名和密码的标准 Windows 对话框?

我正在WinHTTP编写一个需要访问互联网的应用程序,并且可能位于代理后面。一切(几乎)开箱即用是用户在域中,但如果他或她不在域中,那么我需要一种方法来请求凭据。有这样做的标准方法,还是我应该编写自己的对话?

理想情况下,我想要一些模仿 IE 的用户名/密码对话框的东西。

谢谢。

0 投票
1 回答
7101 浏览

vba - 如何使用 VBA 通过 HTTP 发布上传 zip 文件?

其他人以某种形式多次问过这个问题,但大多数仍未得到回答,或者给出的答案是“使用 C#,呃!”,顺便说一句,这是一个非答案。;-)

我想通过 VBA 将 zip 文件上传到 Web 服务器。服务器端代码已经存在并且运行良好;它通过手动表单上传接受 zip 文件,并对 zip 文件的内容进行处理。

理论上,我计划将 zip 文件的二进制内容转换为 HTTP 请求字符串,并使用 WinHTTP 库中的一些方法将其发送到服务器。如果一切顺利,服务器端脚本(在 Perl 中)应该无法判断文件是来自 VBA 还是来自浏览器并继续正常工作。

但是,将 zip 文件转换为 HTTP 请求字符串似乎不是很简单。

在线搜索似乎表明存在 3 种常见策略:

方法一:WinHTTP和手动编码二进制到HTTP请求字符串

  • 涉及以二进制模式打开文件并手动应用一些编码 voodoo 将二进制流更改为 HTTP 请求字符串并使用 WinHTTP 将其发送。可怕的代码量。

方法二:WinHTTP

  • 涉及使用 ADODB.Stream。不到十行代码。

方法 3:通过 SendKeys 自动化 IE

  • 只能用一个词来形容这个 hack:Yuck!并且可能会在未来版本的 IE 中中断,如果还没有的话。不到十行代码。安全风险。

我倾向于Method 2,但是,文档很薄,代码示例很少,并且不确定它是否有效。大多数代码示例都不完整,并且经常有注释说它们不起作用。这种方法真的有效吗?

方法1是下一个。

方法3请不要!(如果涉及到,宁愿使用 C#。喜欢 C#,只是要求只允许 VBA)

任何人都有关于如何完成这项任务的好例子?

0 投票
1 回答
364 浏览

php - 写入关闭后继续 WinHTTP 连接

我正在使用 WinHTTP 将数据发送到 Web 服务器脚本,在某些情况下,我需要服务器终止传入的数据(因为它不是必需的),但仍向客户端应用程序返回响应。我stream_socket_shutdown(STREAM_SHUT_RD)从服务器端使用来结束传入的数据,然后正常发送响应。问题出在 WinHTTP 上,我WinHttpWriteData()按预期收到了否定响应并停止发送数据,但是当我调用WinHttpReceiveResponse()它时返回 false 并GetLastError()返回ERROR_WINHTTP_CONNECTION_ERROR

有没有办法重置 WinHTTP 的内部错误条件?或者在服务器断开连接后接收响应的另一种方式?

谢谢,J

0 投票
1 回答
3014 浏览

c++ - WinHTTP 错误 URL 无效

您如何指定带有路径的 URL,例如:http://stackoverflow.com/questions.

以下内容有效,但不适用于上面示例中指定的 URL。

0 投票
2 回答
2634 浏览

http - 如何使用 WinHTTP 库进行 kerberos(Windows 集成)身份验证

有一个运行在 linux 机器上的服务器,它理解 kerberos,它也处理 SPNEGO,只理解 kerberos,但它不理解 NTLM

Firefox 和 IE 使用 kerberos 令牌成功登录并访问网页,而无需再次提示输入密码。

现在,我正在尝试使用 WinHTTP 库编写一个应用程序。我按照这里的例子 http://msdn.microsoft.com/en-Us/library/aa383144(v=vs.85).aspx

在 WinHttpSetCredentials 调用中,我不想设置用户名密码,而是想告诉此调用使用现有凭据。我怎么做?

如果我提到用户名和密码为空白,它不起作用,它会退回到 NTLM 并失败。

那么有人可以告诉我如何使用 WinHTTPSetCredentials 吗?

0 投票
3 回答
10346 浏览

c++ - 使用 WinHttp 发布表单

在向服务器发布帖子之前,我是否需要添加任何标题?

例如,目前我正在尝试以这种方式发送请求以及发布数据,

这应该工作吗?

0 投票
1 回答
6163 浏览

winhttp - 阐明 WINHTTP_STATUS_CALLBACK 函数的用法,用于 SSL 状态代码


我正在用 C 编写一些 WinHttp 代码。我正在通过 SSL 发送请求,并且为了处理 SSL 错误,我正在注册一个WINHTTP_STATUS_CALLBACK 函数,通过调用WinHttpSetStatusCallback并将 dwNotificationFlags 设置为 WINHTTP_CALLBACK_STATUS_SECURE_FAILURE。

WINHTTP_STATUS_CALLBACK 的文档说,当使用dwInternetStatus= WINHTTP_CALLBACK_STATUS_SECURE_FAILURE 调用回调时,它表明

从服务器检索安全套接字层 (SSL) 证书时遇到一个或多个错误。lpvStatusInformation 参数包含一个标志。有关详细信息,请参阅 lpvStatusInformation 的说明。

现在,lpvStatusInformation参数被键入为 LPVOID。但是我从文档中的那条语句中得知,在 WINHTTP_CALLBACK_STATUS_SECURE_FAILURE 的情况下,它不被视为指针。

的文档lpvStatusInformation说:

如果 dwInternetStatus 参数为 WINHTTP_CALLBACK_STATUS_SECURE_FAILURE,则该参数可以是以下值之一。

...而这些值是这些十六进制值之一:1,2,4,8,10,20,40。(见 WinHttp.h)

这对我来说似乎很清楚。我不应该取消引用指针来获取值。保存十六进制值,而 lpvStatusInformation不是指针。

我是否正确解释了这一点?


我用这种方式编写了我的代码,并且它在过去一直有效。我认为!但是现在我得到了lpvStatusInformation0x0104f288。这与任何十六进制值都不一样。也不可能通过 OR'ing 可能的值来创建该值(尽管文档没有说明同一个 DWORD 中的多个状态项)。它确实看起来像是指向我的指针。当我取消引用指针时,我得到 0x8,它对应于WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CA,这至少是有道理的。


问题是,我是否应该取消引用该指针?

这是回调代码:

0 投票
2 回答
4173 浏览

c++ - 使用 WinHttpSendRequest 发布

如何使用 WinHttpSendRequest 创建要发布的表单?

例如:如果我知道

我如何使用该功能发送它?

0 投票
1 回答
941 浏览

c++ - HttpAddUrl 失败并出现 ERROR_SHARING_VIOLATION (32L)

我正在尝试写一个价格监听器。

数据作为“推送”响应到达,即:分块传输编码。我决定使用 http 服务器 api,因为如果短时间内没有数据,异步 wininet 和 winHTTP 读取数据 api 都会关闭连接。

首先,我使用http server api是否正确?

其次,如果我尝试按照 msdn 示例:

我总是遇到共享违规。我是否需要使用 netsh 以某种方式配置连接?如果是这样怎么办?我看到提到配置 http.sys,我什至尝试以管理员身份执行上述代码。

我将非常感谢您的帮助,因为这方面的代码似乎很少!

非常感谢,乔恩