Libcurl:无法连接到 www.google.fr 连接被拒绝
Libcurl : Failed to connect to www.google.fr connection refused
我正在使用 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 写为 URL for libCurl。
但仍然有:
无法连接到 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:
遵循此 post 中的建议:Can servers block curl requests?
我从 Chrome 中提取了 headers 并将其添加到 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");
我添加了 cookies :
curl_easy_setopt(curl, CURLOPT_COOKIESESSION, 1L);
curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookies.txt");
但终究还是连接失败了。
如果您的连接没有问题,则此错误可能是由于代理服务器造成的:您的学校是否使用代理?
如果是这样,您需要明确告诉 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
我正在使用 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 写为 URL for libCurl。 但仍然有: 无法连接到 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:
遵循此 post 中的建议:Can servers block curl requests?
我从 Chrome 中提取了 headers 并将其添加到 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");
我添加了 cookies :
curl_easy_setopt(curl, CURLOPT_COOKIESESSION, 1L);
curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookies.txt");
但终究还是连接失败了。
如果您的连接没有问题,则此错误可能是由于代理服务器造成的:您的学校是否使用代理?
如果是这样,您需要明确告诉 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