C ++ cURL每次都是“来自服务器的空回复”

时间:2011-05-08 20:01:37

标签: c++ curl

我正在尝试编写一个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); 

2 个答案:

答案 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无需运行 - 仅安装它就足以拦截我的流量。讨厌。一个小小的谷歌搜索出现在这个页面,它更多地讨论了这个问题:

http://www.bennadel.com/blog/2559-cisco-anyconnect-vpn-client-may-block-cors-ajax-options-requests.htm

因此,简短的故事是:它可能不是服务器......本地可能会拦截并阻止您的网络流量。