2009-11-29 129 views
1

我讨厌卷曲它是有太多的依赖过于庞大,当所有我需要做的是迅速打开一个URL。我甚至不需要检索网页的内容,我只需要向服务器发送GET HTTP请求。C++有没有CURL的替代品?

什么是最起码这样我可以做到这一点,就不多说了卷曲!@#$

+1

你是跨平台的,或只是一个特定的一个? – 2009-11-29 19:12:06

+0

我想这是关于LibCURL而不是CURL – Lothar 2017-05-26 12:47:54

回答

5

lots of choices!尝试libwww - 但被警告,大多数人都强烈希望libcurl。使用起来更容易。

+1

甚至当你在2009年回答它时完全放弃了图书馆。 – Lothar 2017-05-26 12:48:30

-1

system("wget -q -O file.htm http://url.com");

+1

当然这需要wget存在于目标机器上。 – 2009-11-30 01:04:20

+0

使用'system'通常不是一个好主意,特别是如果部分命令是由(不可信或愚蠢的)用户提供的话。例如,如果用户提供了“http://url.com; rm -rf〜'作为url,该命令可能会删除你的主目录。 – chtz 2017-06-07 10:51:13

3

有一个很轻的方式,我已经实现了在英国大媒体提供一个高规模的后端服务时,这样做我自己。

这种方法极其操作系统特定。

  1. 打开一个TCP套接字HTTP服务器
  2. 发送所需的HTTP/1.1和大多数虚拟服务器“GET /path/to/url HTTP/1.1\r\nHost: www.host.com\r\n\r\n”(在Host头,不要忘了两个空行和一个换行符要求回车以及为HTTP标头)
  3. 等待响应
  4. 关闭套接字

如果你想你可以在连接结束ALS关闭套接字o想要发送Connection: close\r\n作为标题的一部分,以通知Web服务器您将在检索网页后终止连接。

如果你取一个编码或生成的网页在这种情况下,你必须添加逻辑来解释提取的数据,您可能会遇到麻烦。

+0

如果您在调用任何套接字函数之前使用Win32,则必须初始化Windows套接字层。见http://www.nullterminator.net/winsock。html的教程 - 请注意,你想创建一个客户端,而不是服务器。 – 2009-11-29 20:39:48

3

在Windows(Windows XP,Windows 2000 Professional SP3及更高版本)上,您可以使用WinHttpReadData API。该页面底部还有一个例子。在MSDN

0

Windows HTTP服务

更多信息我已经使用Winsock的时候,我需要尽可能少的依赖可能和它运作良好。您需要编写比使用单独的库或Microsoft WinHTTP库更多的代码。

你需要的函数是WSAStartup,socket,connect,send,recv,closesocket和WSACleanup。
参见用于send函数的样本代码。