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

Kur*_*tis 2 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
Run Code Online (Sandbox Code Playgroud)

代码是:

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); 
Run Code Online (Sandbox Code Playgroud)

Dan*_*erg 5

"来自服务器的空回复"表示libcurl 在发送其请求后未收到服务器的任何响应.在HTTP中,每个请求总会得到一些回复,所以这甚至没有响应HTTP,因此是一个相当严重的错误.

你使用一个非常古老的libcurl,所以你可能遇到了当时存在的bug.

其他可能的原因是网络/设置中的某些内容阻止了它的工作,如防火墙.

  • 升级到最新版本(7.21.6)似乎解决了这个问题,谢谢! (2认同)

Chr*_*ley 5

我花了几个小时调试来自curl的空响应,因此我在这里分享以希望防止其他人发生相同的情况。

我注意到在浏览器和我的机器上的curl中都返回了OPTIONS调用,并显示“来自服务器的空答复”错误,但在同事的情况下工作正常。当我尝试telnet到Web服务器上的端口80时,在键入“ OPTIONS / path / to / resource HTTP / 1.1”行后按Enter键,连接将立即关闭。进行“ lsof -i | grep telnet”(打开telnet会话,然后键入OPTIONS行),我看到我的telnet会话是本地的,而不是我指定的服务器。我知道当时发生了一件非常奇怪的事情。原来是因为我安装了Cisco AnyConnect VPN软件。VPN不需要运行-仅安装它就足以拦截我的流量。讨厌。略微翻阅了此页面,

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

因此,简而言之:它可能不是服务器...本地某物可能会拦截并阻止您的网络流量。