问题标签 [wininet]

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 投票
2 回答
3203 浏览

c# - 使用 C# 和 C++ 获取重定向信息


我究竟做错了什么?我正在尝试从用于验证用户身份的服务器获取重定向信息。这适用于我的 C# 代码,但我无法使我的 C++ 代码正常工作。
所以这是有效的 C# 代码:

我使用这些信息进行进一步的身份验证。一切安好。

我现在想对 C++ 代码做同样的事情。但是该代码不起作用。
所以这里是:

现在的问题是我Location: https://myAuthServer.com/centrallogin-2.2/error.jsp没有正确的重定向和会话。我已经发现,当我没有request.ContentType正确设置时,我的 C# 代码中也会出现这个错误。但我确实在我的 C++ 代码中设置了 Content-Type 标头。所以我不知道我做错了什么。
还有什么想法吗?
编辑:
好的,我也尝试过使用 WinHTTP API。这是我的代码:

所以重定向 url 和会话 id 应该在 chData 中。但结果又是错误的。我也试过 Wireshark。由于这一切都是 HTTPS,我无法从中读出太多信息。我唯一可以比较的是帧数等。使用 WinHTTP 时,Wireshark 日志看起来很相似。所以我认为这是更好的方法。
还有什么想法吗?

0 投票
2 回答
3391 浏览

c++ - 使用 WinInet 和 WinHTTP 调用服务器


当我使用 WinInet API 时,我有一个可以正常工作的请求。我现在想用 WinHTTP API 发出这个请求,因为我已经在我的项目中使用了它,而且它更好。我的请求用于调用 JSON。在调用它之前我已经进行了身份验证。进行身份验证时,我得到一个通过 cookie 发送的 SessionID。
所以这是我的工作 WinInet 代码:

所以我现在想使用 WinHTTP API 来做同样的事情。这是我目前所拥有的:

在后一个电话中,我总是收到 401,但我应该像第一种方法一样收到 200。我还发现,当我没有指定INTERNET_FLAG_NO_COOKIES标志时,第一次调用时会收到 401。所以我怀疑cookie标头有问题。有谁看到我做错了什么?或者这两种方法有什么区别?
谢谢...

0 投票
2 回答
2583 浏览

c++ - FtpFindFirstFile 的问题

我想从我想用于该 FtpFindFirstFile 和 FtpGetFile 的 ftp 目录下载所有文件;

该代码返回错误我知道,因为我没有识别 LPWIN32_FIND_DATA 上的内存。但我不知道怎么做。

0 投票
2 回答
2478 浏览

delphi - Soap Delphi 客户端以 1MB 调用超时结束

我们正在开发一个 SOAP 网络服务 (Apache/PHP)。对于小规模调用,所有这些都运行良好,但是对于 1Mb 的肥皂调用(HTTPS 调用大小为 1MB),我们的 Delphi Soap 客户端在除一台以外的所有 PC 上超时停止,而我们的 PHP 客户端在 default_socket_timeout=300 时运行良好,但停止带有 default_socket_timeout=60 的“错误获取 http 标头”。

我们如何更改 Delphi 的超时时间?事实上,这个超时似乎在 Windows XP 网络库中(由 soaphttptrans.pas 调用的 wininet.dll)

谢谢塞德里克
_

0 投票
2 回答
3902 浏览

c++ - HttpSendRequest 未从服务器获取最新文件

我的应用程序中的 HTTP 请求存在问题,例如,如果远程文件与本地文件大小相同(即使其修改时间不同,因为其内容已更改),尝试下载它会很快返回并且未下载较新的文件。

简而言之,我遵循的过程是:使用INTERNET_FLAG_RESYNCHRONIZE标志建立 HTTP 连接并调用 HttpSendRequest(); 然后检查 HTTP 状态代码并发现它是“200”。

  • 如果远程文件已更新,但仍与本地副本大小相同:运行应用程序后本地文件未更改。如果我在发送请求后打电话HttpQueryInfo()HTTP_QUERY_LAST_MODIFIED我,它会给我服务器文件的实际最后修改时间,我可以看到它与我试图覆盖的本地文件不同。
  • 如果远程文件被更新,并且文件大小与本地副本不同:它被下载并按预期覆盖本地副本。

这是代码的一个相当精简的版本,用于删除助手和错误检查:

因为我发现我可以查询远程文件的最后修改时间,并且发现它是准确的,所以我知道它实际上正在到达服务器。我认为如果文件过期INTERNET_FLAG_RESYNCHRONIZE,指定会强制文件重新同步。难道我都错了吗?这只是它应该如何工作吗?


编辑:我用数据包嗅探器做了一些调查,这里有一些额外的信息:

如果远程和本地文件完全一样,这就是交换:

现在,如果远程文件已更改,但文件大小保持不变:

因此,服务器确实在文件更改时发送了文件,但我的应用程序似乎仍然认为它没有更改。我认为问题在于我的应用程序如何处理响应;这不是我自己的代码,编写它的人很久以前就已经离开了。

我发现的一个问题是,在上述两种情况下,当我打电话时HttpQueryInfo()HTTP_QUERY_STATUS_CODE我会得到 200 回。但是,在上面的第一种情况下,我可以看到实际的服务器响应是 304,而不是 200。深入研究我们正在使用的代码,我发现它似乎试图通过进行文件大小比较来解决这个问题,并假设如果文件大小相同,则文件未更改;因此,我遇到的问题!

所以现在我的问题更简单了:为什么HttpQueryInfo()即使服务器返回 3XX 错误之一也会返回 200?我发现有些人在网上问了类似的问题,但他们要么没有收到回复,要么直接与网络浏览器打交道。

0 投票
2 回答
2030 浏览

delphi - 在 HttpSendRequest 之后获取身份验证令牌

以下代码将我的应用程序登录到服务器。如果登录成功,该服务器将返回一个身份验证令牌。我需要使用该令牌来查询服务器以获取信息。

我如何获得该令牌?我尝试查询 cookie,尝试了 InternetGetCookie() 等等。代码表示赞赏

谢谢

杰斯

编辑

我发现如果你使用 InternetReadFile 你可以获得那个令牌。但是,该令牌以字节数组的形式出现。以后很难使用它来将它发送到服务器......谁知道如何将字节数组转换为 pchar 或字符串?

0 投票
3 回答
1396 浏览

wininet - Wion32's HttpSendRequest : ERROR_INTERNET_INCORRECT_HANDLE_STAT

I have C++ Win32 app that uses HttpSendRequest to request some URL (via https). It worked OK earlier; but then errors ERROR_INTERNET_INCORRECT_HANDLE_STATE began happen. Why these ones? Any ideas?

0 投票
2 回答
5822 浏览

windows - 无法在 Windows 7 上查询代理“自动检测设置”

我正在尝试捕获代理设置(“自动检测设置”)。我的代码适用于 XP 和 Vista。但它不适用于 Windows 7

请查看目标平台的详细信息

Windows 7 企业版,IE 8.0.7600.16385,Wininet.dll 8.0.7600.16535

请看代码片段

但是在 Windows 7 上,即使选中了 IE 中的“自动检测设置”选项,程序也会说没有设置该标志

我也尝试使用 WinHttp api,如下所示。

在 Windows 7 上,上述代码也无法捕获“自动检测设置”选项。对此的任何意见都将受到高度赞赏。

谢谢约翰

0 投票
2 回答
891 浏览

winapi - 调用 InternetOpen 时应该使用哪种 accessType?

根据MSDN,您可以为 InternetOpen 指定访问类型参数。dwAccessType 参数的两个选项是:

INTERNET_OPEN_TYPE_DIRECT - 在本地解析所有主机名。INTERNET_OPEN_TYPE_PRECONFIG - 从注册表中检索代理或直接配置。

我应该使用哪一个?我不知道哪个会“更好”。我们不希望我们的应用程序做任何聪明的事情,我们希望它做的只是以正常方式访问互联网。

0 投票
3 回答
12893 浏览

delphi - 如何使用 WinInet 在 Delphi 2010 中发送 HTTP Post 请求

我想使用 WinInet 在 Delphi 2010 中发送 HTTP Post 请求,但我的脚本不起作用;/

这是我的德尔福脚本:

和我的 PHP 脚本: