我正在尝试编写一个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)
"来自服务器的空回复"表示libcurl 在发送其请求后未收到服务器的任何响应.在HTTP中,每个请求总会得到一些回复,所以这甚至没有响应HTTP,因此是一个相当严重的错误.
你使用一个非常古老的libcurl,所以你可能遇到了当时存在的bug.
其他可能的原因是网络/设置中的某些内容阻止了它的工作,如防火墙.
我花了几个小时调试来自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不需要运行-仅安装它就足以拦截我的流量。讨厌。略微翻阅了此页面,
因此,简而言之:它可能不是服务器...本地某物可能会拦截并阻止您的网络流量。