【问题标题】:Libcurl : Failed to connect to www.google.fr connection refusedLibcurl:无法连接到 www.google.fr 连接被拒绝
【发布时间】:2019-04-17 07:12:36
【问题描述】:

我正在使用 curl-7.64.1 (https://curl.haxx.se/windows/) 32 位、OpenSSL 1.1.1b(32 位)和 tidy-5.0.0 进行 XML 解析。

当我在家时,任何连接都可以正常工作,但是当我在学校时,连接到这个的 Wifi。所有连接都被拒绝。

我尝试与https://www.google.fr/ 建立连接,并使用 CURLOPT_VERBOSE 在屏幕上显示消息:

  • 正在尝试 172.217.18.227...
  • TCP_NODELAY 设置
  • 连接到 172.217.18.227 端口 443 失败:连接被拒绝
  • 无法连接到 www.google.fr 端口 443:连接被拒绝
  • 关闭连接 0 无法连接到 www.google.fr 端口 443:连接被拒绝

我首先尝试将端口更改为 8080。我写了https://www.google.fr:8080 作为 libCurl 的 URL。 但仍然有: 无法连接到 www.google.fr 端口 8080:连接被拒绝

在我尝试在 LibCurl 连接中设置代理之后。但这并没有改变任何东西。

 CURL *curl;
 char curl_errbuf[CURL_ERROR_SIZE];
 TidyDoc tdoc;
 TidyBuffer docbuf = {0};
 TidyBuffer tidy_errbuf = {0};
 int err;

 curl = curl_easy_init();
 curl_easy_setopt(curl, CURLOPT_URL, "https://www.google.fr:8080");
 curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, curl_errbuf);
 //curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
 curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_cb);

 curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);

 tdoc = tidyCreate();
 tidyOptSetBool(tdoc, TidyForceOutput, yes);
 tidyOptSetInt(tdoc, TidyWrapLen, 4096);
 tidySetErrorBuffer(tdoc, &tidy_errbuf);
 tidyBufInit(&docbuf);

 curl_easy_setopt(curl, CURLOPT_WRITEDATA, &docbuf);

 curl_easy_setopt(curl, CURLOPT_PROXY, "http://212.129.52.155:8080");

 err = curl_easy_perform(curl);

我想在我学校的 Wifi 上进行连接。

编辑 1:

遵循这篇文章中的建议:Can servers block curl requests?

我从 Chrome 中提取了标头并将其添加到 LibCurl 中。

struct curl_slist *list = NULL;

list = curl_slist_append(list, "accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
list = curl_slist_append(list, "accept-encoding: gzip, deflate, br");
list = curl_slist_append(list, "accept-language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7");
list = curl_slist_append(list, "cache-control: max-age=0");
list = curl_slist_append(list, "upgrade-insecure-requests: 1");

curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);

我启用了 UserAgent 设置:

curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36");

我还添加了 cookie:

curl_easy_setopt(curl, CURLOPT_COOKIESESSION, 1L);
curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookies.txt");

但毕竟连接仍然失败。

【问题讨论】:

  • 为什么将端口 8080 附加到 URL? google.fr:8080Google 不监听 8080 端口。

标签: c codeblocks libcurl


【解决方案1】:

如果您的连接正常,则此错误可能是由于代理服务器:您的学校使用代理吗?

如果是这样,您需要明确告诉 curl 通过您的代理发出此请求。这可以通过

curl_easy_setopt(curl, CURLOPT_PROXY, "http://proxy:80");

您可以在此处找到有关代理的更多信息:https://curl.haxx.se/libcurl/c/CURLOPT_PROXY.html

或者,您可以尝试在命令行中使用 curl -x http://proxy_server:proxy_port --proxy-user username:password -L http://url

【讨论】:

  • 嘿,是的,你是对的,我的学校正在使用代理。感谢superuser.com/questions/346372/…的帖子,我得到了服务器的代理,并将其添加到curl的连接配置中,现在可以正常工作了。
  • @axel7083 您已经在问题中使用了代理。您需要进行哪些更改才能使其正常工作?只是端口错误还是其他原因?
  • 此特定行是在编辑中添加的,不在原始帖子中。
  • 这一行已经出现在第一个版本中:“在我尝试在 LibCurl 连接中设置代理之后。但它没有改变任何东西。”
  • 其实我用的是随机代理,不是我学校的代理,所以我用了一些工具拿到了我学校的代理,用了之后就正常了
猜你喜欢
  • 1970-01-01
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-18
  • 2021-10-04
相关资源
最近更新 更多