每次都C++ cURL "empty reply from server"

C++ cURL "empty reply from server" every time

本文关键字:empty reply from server cURL C++      更新时间:2023-10-16

我正在尝试编写一个C++程序,以使用cURL从网站读取。 我已经开始使用 cURL 示例 simple.c 中的代码。 如果我完全使用该代码,无论我尝试访问哪个 URL,我都会收到错误 #52:"来自服务器的空回复"。 这适用于我尝试的任何 URL。 如果我从命令行使用 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); 
"来自

服务器的空回复"意味着libcurl在发送请求后没有收到来自服务器的任何响应。在HTTP中,每个请求总是得到一些东西,所以这甚至没有用HTTP响应,因此是一个相当严重的错误。

你使用了一个非常旧的libcurl,所以你可能遇到了当时存在的错误。

造成这种情况的其他可能原因是您的网络/设置中的某些东西阻止了它的工作,例如防火墙。

我浪费了几个小时来调试来自 curl 的空响应,所以我在这里分享,希望能防止同样的事情发生在其他人身上。

我注意到 OPTIONS 调用在我的浏览器和我的机器上的 curl 中都返回了"来自服务器的空回复"错误,但从同事那里工作正常。 当我尝试远程登录到 Web 服务器上的端口 80 时,在键入"OPTIONS/path/to/resource HTTP/1.1"行后,只要我按 Enter 键,连接就会立即关闭。 正在执行"lsof -i |grep telnet"(在键入选项行之前,在打开telnet会话的情况下),我看到我的telnet会话是本地的,而不是我指定的服务器。 我知道当时发生了一些非常奇怪的事情。 原来这是因为我安装了Cisco AnyConnect VPN软件。 VPN不需要运行 - 只需安装它就足以拦截我的流量。 讨厌。 谷歌搜索了一下这个页面,其中讨论了更多关于这个问题的信息:

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

所以,短话是:它可能不是服务器...本地内容可能会拦截和阻止您的网络流量。