在没有安全协议的网页上使用 curl
Use curl with a webpage with no security protocol
我有一个网页:10.1.1.165,我正试图从中获取数据。我在 linux 中构建了这个程序,它运行良好,但是,在为 windows 系统开发时,我 运行 遇到了问题。
if (filename.substr(filename.length() - 4, 4) == "html" || filename.substr(filename.length() - 3, 3) == "htm")
{
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
string s;
if (curl)
{
curl_easy_setopt(curl, CURLOPT_URL, filename.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &s);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
if (gLogger->isDebug()) curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout/1000);
//curl_easy_setopt (curl, CURLOPT_VERBOSE, 1L); //remove this to disable verbose output
// Perform the request, res will get the return code
res = curl_easy_perform(curl);
// Check for errors
if (res != CURLE_OK)
{
while (res == CURLE_OPERATION_TIMEDOUT)
{
res = curl_easy_perform(curl);
}
if (res != CURLE_OK)
{
gLogger->error("curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
curl_easy_cleanup(curl);
return -1;
}
}
curl_easy_cleanup(curl);
在我的 linux 系统上,这非常有效。在我的 Windows 系统上,我得到:curl_easy_perform() 失败:不支持的协议。如果我转到我的网页 10.1.1.165,我会看到它的托管没有安全性。我无法更改该网页的托管方式。
根据此资源:https://curl.haxx.se/libcurl/c/CURLOPT_PROTOCOLS.html
By default libcurl will accept all protocols
有谁知道为什么 curl 不喜欢我在 windows 上抓取这个网页?如果是这样,我可能需要调整哪些设置?
我已经通过切换到 curl-7.55.1 解决了我的问题。以前我使用的是 curl-7.68.0。我不确定该功能是否已被删除,或者使用它是否涉及更多。
我有一个网页:10.1.1.165,我正试图从中获取数据。我在 linux 中构建了这个程序,它运行良好,但是,在为 windows 系统开发时,我 运行 遇到了问题。
if (filename.substr(filename.length() - 4, 4) == "html" || filename.substr(filename.length() - 3, 3) == "htm")
{
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
string s;
if (curl)
{
curl_easy_setopt(curl, CURLOPT_URL, filename.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &s);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
if (gLogger->isDebug()) curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout/1000);
//curl_easy_setopt (curl, CURLOPT_VERBOSE, 1L); //remove this to disable verbose output
// Perform the request, res will get the return code
res = curl_easy_perform(curl);
// Check for errors
if (res != CURLE_OK)
{
while (res == CURLE_OPERATION_TIMEDOUT)
{
res = curl_easy_perform(curl);
}
if (res != CURLE_OK)
{
gLogger->error("curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
curl_easy_cleanup(curl);
return -1;
}
}
curl_easy_cleanup(curl);
在我的 linux 系统上,这非常有效。在我的 Windows 系统上,我得到:curl_easy_perform() 失败:不支持的协议。如果我转到我的网页 10.1.1.165,我会看到它的托管没有安全性。我无法更改该网页的托管方式。
根据此资源:https://curl.haxx.se/libcurl/c/CURLOPT_PROTOCOLS.html
By default libcurl will accept all protocols
有谁知道为什么 curl 不喜欢我在 windows 上抓取这个网页?如果是这样,我可能需要调整哪些设置?
我已经通过切换到 curl-7.55.1 解决了我的问题。以前我使用的是 curl-7.68.0。我不确定该功能是否已被删除,或者使用它是否涉及更多。