我会在前言中说我仍然是一名新的C/C++程序员,请原谅我可能是一个多余的问题。使用libcurl进行POST请求
我正在用C/C++编写程序来与本网站进行交互:http://www.youtube-mp3.org/。
根据我的理解,为了让我的程序为我下载一个链接,我将不得不向包含我想要转换的URL的服务器发送一个POST请求,然后找到让它跟随URL的方式这是生成的,允许我下载文件。我也明白,libcurl是在C/C++中做这种事情的好方法。
我试过在libcurl网站上使用POST示例(http://curl.haxx.se/libcurl/c/simplepost.html和另一个),但似乎都没有工作。另外,我不确定如何让我的程序按照出现的说法链接'下载'。我试着发送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问题有关。它不是关于C++和libcurl。我们没有机会帮助您提供所提供的信息。 – 2014-09-30 18:38:12
嗨,欢迎来到SO,请客气一点,请阅读[本指南](http://stackoverflow.com/help/mcve)?在你的问题中加入相关的代码和信息,很可能你会得到满意的答案和很好的答案。 – 2014-09-30 18:38:52
源代码中没有下载链接,但DOM树中有一个。结果部分是通过使用JavaScript操作DOM树(现在越来越少的网页是静态HTML)创建的。编写浏览器插件可能会更容易。 – molbdnilo 2014-09-30 18:59:44