我正在尝试编写一个C ++程序,使用cURL从网站上读取。我已经开始使用cURL示例simple.c中的代码了。如果我完全使用该代码,无论我尝试访问哪个URL,我都会收到错误#52:“来自服务器的空回复”。这适用于我尝试的任何网址。如果我从命令行使用cURL,它似乎工作正常。
我的计划的详细回复是:
*About to connect() to www.google.com port 80 (#0)
* Trying 74.125.91.99...* connected
*connected to www.google.com (74.125.91.99) port 80 (#0)
>GET / HTTP/1.1
Host: www.google.com
Accept: */*
* Empty reply from server
* Connection #0 to host www.google.com left intact
* server returned nothing (no headers, no data)
*Closing connection #0
代码是:
CURL *curl;
CURLcode res;
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.com");
curl_easy_setopt(curl, CURLOPT_VERBOSE, TRUE);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
答案 0 :(得分:5)
“来自服务器的空回复”表示libcurl在发出请求后没有从服务器收到任何响应。在HTTP中,每个请求总会得到一些回复,所以这甚至都没有响应HTTP,因此是一个相当严重的错误。
你使用一个非常古老的libcurl,所以你可能遇到了当时存在的错误。
其他可能的原因是网络/设置中的某些内容阻止了它的运行,例如防火墙。
答案 1 :(得分:5)
我丢失了几个小时来调试curl的空响应,所以我在这里分享以防止这种情况发生在其他人身上。
我注意到OPTIONS调用是通过服务器""空回复返回的。浏览器和我的机器上的curl都出错了,但是同事们工作得很好。当我尝试telnet到Web服务器上的端口80时,在输入" OPTIONS / path / to / resource HTTP / 1.1"然后按Enter键后,连接将立即关闭。线。做一个" lsof -i | grep telnet" (在打开OPTIONS行之前打开telnet会话),我看到我的telnet会话是本地的,而不是我指定的服务器。我知道当时发生了一些非常奇怪的事情。事实证明这是因为我安装了Cisco AnyConnect VPN软件。 VPN无需运行 - 仅安装它就足以拦截我的流量。讨厌。一个小小的谷歌搜索出现在这个页面,它更多地讨论了这个问题:
因此,简短的故事是:它可能不是服务器......本地可能会拦截并阻止您的网络流量。