gpt4 book ai didi

php - C++ WinInet 只发出 1 个请求

转载 作者:行者123 更新时间:2023-11-30 05:34:17 26 4
gpt4 key购买 nike

我在本地使用 WinInet 时遇到问题。我有一个运行良好的本地 Apache Web 服务器 (xampp),问题是当我尝试向 PHP 脚本发出 GET 请求时,它似乎只执行一次。 PHP 脚本只是输出一个随机数,我看到同一个数字 3 次(脚本没有问题)。我还检查了 Apache 访问日志,它只显示一次。奇怪的是,当不在本地使用它时,循环工作得很好并且它确实发送了多个请求(Wireshark 也显示了这一点)。

这是代码,经过简化但仍然存在问题:

#include <Windows.h>
#include <WinInet.h>
#include <iostream>
#include <string>

#pragma comment(lib, "wininet.lib")

void req()
{
HINTERNET hInternet = InternetOpenW(L"useragent", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);

HINTERNET hConnect = InternetConnectW(hInternet, L"127.0.0.1", 80, NULL, NULL, INTERNET_SERVICE_HTTP, 0, NULL);

HINTERNET hRequest = HttpOpenRequestW(hConnect, L"GET", L"test/test.php", NULL, NULL, NULL, 0, 0);

BOOL bRequestSent = HttpSendRequestW(hRequest, NULL, 0, NULL, 0);

std::string strResponse;
const int nBuffSize = 1024;
char buff[nBuffSize];

BOOL bKeepReading = true;
DWORD dwBytesRead = -1;

while (bKeepReading && dwBytesRead != 0)
{
bKeepReading = InternetReadFile(hRequest, buff, nBuffSize, &dwBytesRead);
strResponse.append(buff, dwBytesRead);
}

std::cout << strResponse << std::endl;

InternetCloseHandle(hRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);
}

int main()
{
for (int x = 0;x < 3; x++) // 3 times
{
req();
Sleep(2000);
}

system("PAUSE");
}

我似乎无法弄清楚...

最佳答案

如果我查询例如 www.google.com,我无法重现您的观察结果。

我认为您的程序只是继续使用 InternetReadFile 读取响应,但您计算机上的其他进程尚未完成请求。我建议使用 WinHttpReceiveResponse 等待请求完成在阅读响应内容之前。

关于您的实现的更多信息:

  • 您不需要为每个新请求调用 InternetOpen(..)。执行此操作一次并存储返回的句柄直到您的应用程序终止就足够了。

  • 检查错误非常重要!您的功能仅依赖于所有成功的调用,由于您的问题,这显然不是这种情况......

关于php - C++ WinInet 只发出 1 个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34321672/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com