我还没有太多信息可以在这里使用。我们的应用程序向我们的服务器发送一个 HTTP 查询,并且在我们迄今为止使用的所有情况下,它都运行良好。但是对于一个网络通过代理的客户端,他们的日志表明请求成功发出,但没有任何回复返回,并且我们的 Web 服务器在日志中没有显示任何关于已收到任何内容的信息(在发生故障的时间段) ,日志中的所有内容都是从安装程序内部下载 ZIP,如下所述)。对于他们网络上的任何人来说,这种情况始终如一。
一个奇怪的事情是,应用程序的安装程序发送了一个对 ZIP 文件的 HTTP 请求,它完成得很好,但是在启动应用程序时,它的第一个请求(对 PHP 文件)失败了。它们共享用于发出请求的相同基本代码,但只是发送不同的参数。我一直在试图弄清楚这两个电话的真正不同之处,它基本上可以归结为:
- 一个是请求一个zip文件,另一个是发送参数到一个php文件;文件类型过滤?
- 失败的那个添加了一些额外的标头参数。我会理解他们是否被代理剥离,但如果它有自定义/不受支持的标头,它会完全放弃请求吗?
这是函数调用的基本骨架结构:
HINTERNET hInternetOpen = InternetOpen( szAppName, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0 );
HINTERNET hInternetConnect = InternetConnect( hInternetOpen, "www.server.com", INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, NULL, 0 );
HINTERNET hRequest = HttpOpenRequest( hInternetConnect, "GET", "path/query.php?params=etc", NULL, NULL, "*/*", INTERNET_FLAG_RELOAD, 0 );
// Here I was including some custom headers, such that szHeaders would look something like:
// "KEY:12345\nTZ:New_York\n"
HttpSendRequest( hRequest, szHeaders, dwHeadersLen, NULL, 0 );
InternetReadFile( hRequest, lpBuf, dwBufSize, &dwAmtRead );
我将设置一个新的构建,它将提供更多的错误检查,以确定请求的哪一部分失败以及返回了哪些错误代码。它还将取消自定义标头,以及此与安装程序之间的任何其他不一致。
我真的不太相信这些东西真的是原因,所以与此同时,我正在寻找关于可能出了什么问题的猜测,或者我应该仔细检查或注意哪些事情。我最初确信这只是他们锁定网络的过滤问题,但通过与他们的 IT 团队交谈,它发出的请求并没有被他们阻止。也许我正在做一些非标准的事情。