【问题标题】:C++ : Getting HTTP status code from a URLC++:从 URL 获取 HTTP 状态码
【发布时间】:2010-03-04 05:37:32
【问题描述】:

我正在开发一个应用程序,我必须点击一个 URL 并获取从该 URL 返回的 HTTP 状态代码。目前我正在使用 WININET 函数来实现这一点。实现这一点的代码:

hOpen = InternetOpenA("MYAPP", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); hFile = InternetOpenUrlA(hOpen, url.c_str() , NULL, 0,INTERNET_FLAG_RELOAD, 0); HttpQueryInfoA(hFile,HTTP_QUERY_STATUS_CODE,(void*)buffer,&dwBufLen,NULL);

我做了一些检查来查看性能,我可以看到平均一次点击大约需要 300 毫秒。由于我将进行多次点击,因此总时间约为 8-10 秒,这会减慢整个应用程序的速度。

在 MAC 上也达到同样的效果,大约 100 毫秒左右(我正在使用 COCOA)。

那么,在 WIN 上是否有其他 API 可以让我更快地实现这一点?

提前致谢, 阿米特

【问题讨论】:

  • 你可以使用 boost::asio 库。它可能会更快。
  • 您是否做过任何数据包嗅探以查看实际的 URL 检索需要多长时间。所用时间取决于 URL。
  • 实际上我们不能包含任何其他库......所以我必须依赖标准 C++ 调用......
  • 然后尝试 WinHTTP,如下所述。或者,如果这还不够快,您可能必须在 Windows 堆栈之上构建自己的 HTTP 库。

标签: c++ windows


【解决方案1】:

libcurl 是另一种选择。它实际上是独立于平台的。你可能不喜欢这个库的地方是你需要一些额外的 DLL。

【讨论】:

【解决方案2】:

WinHTTP 是另一个主要的 Win32 HTTP API。它更多地是为没有 UI 的服务器和客户端设计的,因此可能更快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 2018-10-28
    相关资源
    最近更新 更多