C++ 对POST请求使用libcurl

C++ 对POST请求使用libcurl,c++,c,post,libcurl,C++,C,Post,Libcurl,在开始之前,我会说我还是一个新的C/C++程序员,所以请原谅我提出了一个可能是多余的问题 我正在用C/C++编写一个与此网站交互的程序: 据我所知,要让我的程序为我下载一个链接,我必须向服务器发送一个POST请求,其中包含我要转换的URL,然后找到一种方法让它跟随生成的URL,允许我下载文件。我也知道libcurl是在C/C++中做这类事情的好方法 我曾尝试使用libcurl网站上的帖子示例和其他示例,但两者都不起作用。此外,我不知道如何让我的程序跟随显示为“下载”的链接。我尝试发送一个POST

在开始之前,我会说我还是一个新的C/C++程序员,所以请原谅我提出了一个可能是多余的问题

我正在用C/C++编写一个与此网站交互的程序:

据我所知,要让我的程序为我下载一个链接,我必须向服务器发送一个POST请求,其中包含我要转换的URL,然后找到一种方法让它跟随生成的URL,允许我下载文件。我也知道libcurl是在C/C++中做这类事情的好方法

我曾尝试使用libcurl网站上的帖子示例和其他示例,但两者都不起作用。此外,我不知道如何让我的程序跟随显示为“下载”的链接。我尝试发送一个POST请求,然后告诉我的程序获取页面的html源代码并将其存储在一个文件中,但该文件似乎不包含任何下载链接。当这通过浏览器完成时,页面源肯定包含一个工作下载链接

我真的很感谢你的帮助,因为我不确定我的想法是否完全错了

编辑:我的问题一点也不清楚。以下是我用于POST请求的相关代码:

static const char *postthis="http://www.youtube.com/watch?v=KMU0tzLwhbE";

CURL *curl;
CURLcode res;

curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://www.youtube-mp3.org/");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postthis);

curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)strlen(postthis));

/* Perform the request, res will get the return code */ 
res = curl_easy_perform(curl);
/* Check for errors */ 
if(res != CURLE_OK)
  fprintf(stderr, "curl_easy_perform() failed: %s\n",
          curl_easy_strerror(res));
}
以及将html源代码写入文件:

   static size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)
{
   int written = fwrite(ptr, size, nmemb, (FILE *)stream);
   return written;
}


{

  static const char *filename = "head.txt";
  FILE *htmlfile;

  curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);

  // open the file
  htmlfile = fopen(filename,"w");
  if (htmlfile == NULL) {
    curl_easy_cleanup(curl);
    return -1;
   }

  curl_easy_setopt(curl,CURLOPT_WRITEDATA, htmlfile);

  curl_easy_perform(curl);

  /* close the header file */
  fclose(htmlfile);

  /* always clean up */
  curl_easy_cleanup(curl);

}

您的代码不起作用,因为您假设的逻辑是错误的


http://www.youtube-mp3.org 不使用POST,事实上它的下载表单根本不提交到服务器端URL。单击Convert Video按钮时,将调用客户端JavaScript来处理输入URL,从YouTube下载相关信息,并修改调用页面的HTML以显示实际的下载链接和视频预览图像。这就是为什么在检索HTML时看不到下载链接的原因——您没有调用执行实际准备下载链接工作的JavaScript。如果没有大量的额外工作,您将无法从应用程序中完成这项工作,它必须在web浏览器中完成,该浏览器具有真正的JavaScript引擎和真正的DOM,以便脚本进行操作。

您的问题是,它很可能与网络/http问题有关。它不是关于C++和LiCURL的。我们没有机会帮助您了解所提供的信息。您好,欢迎访问SO,请阅读?在你的问题中包含相关的代码和信息,你很可能会得到正确的答案。源代码中没有下载链接,但DOM树中有一个。结果部分是通过使用JavaScript操作DOM树创建的。现在越来越少的web页面是静态HTML。对你来说,编写浏览器插件可能会更容易。感谢大家的帮助-我现在知道我哪里出了问题,以及如何最好地从这里开始。非常感谢你的评论和指出我哪里出了问题。我一定会进一步研究这个问题;我不太了解像这样的网站是如何工作的,所以我渴望了解更多。