c++ - 来自应用程序的 HTTP 请求在发件人的网络/代理和我们的网络主机之间消失

标签 c++ http proxy wininet

我还没有太多信息可以在这里使用。我们的应用程序向我们的服务器发送一个 HTTP 查询,并且在我们迄今为止使用的所有情况下它都运行良好。但是对于一个网络通过代理的客户端,他们的日志表明请求成功发出,但没有回复返回,我们的网络服务器在日志中没有显示任何关于收到任何东西的信息(在发生故障的时间段) ,日志中显示的只是从安装程序内部下载 ZIP,正如我接下来提到的那样)。对于他们网络上的任何人,这种情况一直发生。

一件奇怪的事情是应用程序的安装程序发送了一个 ZIP 文件的 HTTP 请求,它完成得很好,但是在启动应用程序时,它的第一个请求(对 PHP 文件)失败了。它们共享用于发出请求的相同基本代码,但只是发送不同的参数。我一直在努力找出这两个调用的真正不同之处,基本上可以归结为:

  • 一个正在请求一个zip文件,另一个正在向一个php文件发送参数;文件类型过滤?
  • 失败的那个添加了一些额外的 header 参数。如果他们被代理剥离,我会理解,但如果它有自定义/不支持的 header ,它能完全放弃请求吗?

下面是函数调用的基本骨架结构:

    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 );

我将设置一个新版本,它将提供更多的错误检查,以确定请求的哪一部分失败以及返回了哪些错误代码。它还将取消自定义 header ,以及它与安装程序之间的任何其他不一致。

我真的不太相信那东西真的是原因,所以与此同时,我正在寻找关于可能出了什么问题的猜测,或者我应该仔细检查或注意哪些事情.我最初确信这只是他们锁定网络的过滤问题,但通过与他们的 IT 团队交谈,他们提出的请求并没有被他们阻止。也许我在做一些不规范的事情。

最佳答案

我建议使用 tcpdumpwireshark监控进出您的网络服务器的实际流量。你看到他们的请求通过了吗?如果没有,我会要求他们在防火墙内外尝试同样的事情,看看那里发生了什么。

关于c++ - 来自应用程序的 HTTP 请求在发件人的网络/代理和我们的网络主机之间消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3687960/

相关文章:

c++ - 使用 boost spirit x3 将数字解析为字符串

c++ - 如何使用 GLFW 确定 OpenGL 3.3 窗口的可绘制区域的大小

ruby-on-rails - 处理 HTTP 响应和解析 JSON 数据时遇到问题

Spring android 的 iOS 替代品

c++ - 如何使用异步库实现忙碌信号?

c++ - 对多字节 native 类型进行按字节操作

javascript - 使用angular向带有许多数据的php发送http post请求

cocoa - 在 Mac OS X 应用程序中使用网络代理

http - 如何通过代理进行 HTTP/HTTPS GET

HTTP 代理背后的 Emacs