【问题标题】:Curl simple https request returns nothing C++卷曲简单的 https 请求不返回任何 C++
【发布时间】:2012-04-04 07:59:39
【问题描述】:

我正在使用 Visual Studio C++ 2010,它与 cURL 一起工作得很好,但问题是 https 请求什么也不返回。而不是显示输出:

#include "StdAfx.h"
#include <stdio.h>
#include <curl/curl.h>
#include <conio.h>

int main(void)
{
  CURL *curl;
  CURLcode res;

  curl = curl_easy_init();
  if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "https://www.google.com");
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
    res = curl_easy_perform(curl);
    curl_easy_cleanup(curl);
  }
  _getch();
  return 0;
}

例如这段代码,它只是一个对谷歌的 https 请求,但它没有返回任何内容,因为它以 https 开头。如果我去掉https的“s”,它就可以正常工作:“http://www.google.com.br”正常显示结果。我在这里想念什么?我正在使用 cURL 中的示例。 我尝试了其他网站,同样的事情发生了。 :/ 喜欢https://www.facebook.com

顺便说一句,如果你们知道如何将网页内容存储在字符串中,我很高兴知道。

提前致谢。 :)

【问题讨论】:

  • 将这些 ssl 验证标志设置为零真的是您想要的吗?稍微戳一下似乎意味着它将绕过某种程度的验证。我的第一次尝试是尝试看看是否可以像在命令行 curl 上使用 https url 那样清除这些标志。我猜它会以同样的方式失败。
  • 迈克尔我不太确定。我想要的是在没有任何 SSL 安全性的情况下正确获得 https,因为我希望它能够快速检索数据。但是现在我什么也得不到:/我想要获得最快的方法,即使它会危及数据的安全性。
  • 您是从源代码构建的吗?如果是这样,您是否明确启用 SSL 支持?如果没有,您下载的软件包是否启用了 SSL 支持(或者,您从哪里下载的)?
  • 我在这里使用了本教程:curl.haxx.se/libcurl/c/Using-libcurl-with-SSH-support-in-Visual-Studio-2008.pdf 我甚至下载了相同的版本在与 Visual Studio C++ 2008 相同的环境中,为了不发生任何冲突而需要的东西中,除了 SSL 之外,它与其他所有东西都可以正常工作。它甚至没有显示错误,只是空白,就像它甚至没有尝试发出请求并继续执行代码一样。
  • 我认为这是一个重复的帖子:other post

标签: c++ curl


【解决方案1】:

这个简单的例子对我有用:

#include <stdio.h>
#include <curl/curl.h>

int main(void)
{
  CURL *curl;
  CURLcode res;

  curl = curl_easy_init();
  if(curl) {
    /* First set the URL that is about to receive our POST. This URL can
       just as well be a https:// URL if that is what should receive the
       data. */
    curl_easy_setopt(curl, CURLOPT_URL, "https://www.google.co.uk");

    /* Perform the request, res will get the return code */
    res = curl_easy_perform(curl);

    /* always cleanup */
    curl_easy_cleanup(curl);
  }
  return 0;
}

我很久以前就获得了源代码并构建了库,但我确信我在编译源代码之前启用了 SSL 支持。确保您已安装 OpenSSL,并且(如果您在 Linux 下工作)您已正确初始化了 PKG_CONFIG_PATH 变量。这是您在执行configure 脚本时指定的两个选项。

  --with-ssl=PATH         Where to look for OpenSSL, PATH points to the SSL
                          installation (default: /usr/local/ssl); when
                          possible, set the PKG_CONFIG_PATH environment
                          variable instead of using this option

  --without-ssl           disable OpenSSL

希望对你有帮助。

如果您使用的是 Windows,这篇文章对您也很有用:

Building libcurl with SSL support on Windows

【讨论】:

  • 嘿伙计,更具体地说,我正在 Visual Studio C++ 2008 上的 Windows 7 上工作,我已经安装了 OpenSSL,但我是按照 Visual Studio 2008 的 Curl 页面中的教程构建的,我必须下载并安装openssl才能做到这一点,但是我正在做的这个应用程序我打算分发,我是否必须要求每个人都安装OpenSSL?但首先,我想知道我在哪里告诉应用程序指向 OpenSSL,我在支持下构建了它,但我似乎没有让它工作,如果你有什么要分享的,我会很高兴。谢谢。 :)
  • 哦,是的,有没有办法忽略 SSL 并制作 https,即使没有安全的东西只是为了检索 html ?因为我不关心安全性,我只想从服务器接收数据
  • 谢谢。这刚刚结束了我在第 2 天的地狱。
猜你喜欢
  • 2014-01-29
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
  • 2017-03-07
  • 2014-08-04
  • 2017-04-13
  • 2011-06-15
  • 2018-09-20
相关资源
最近更新 更多