我想将libcurl用于涉及从网页获取图像的项目。 URL如下所示:
http://xxx.xxx.xxx.xxx/cgi-bin/anonymous/image.jpg
使用命令行cURL我可以使用
检索图像$curl -o sampleimage.jpg http://xxx.xxx.xxx.xxx/cgi-bin/anonymous/image.jpg
我想知道libcurl中这段代码的等价物,因为我现在已经疯了。我在网上得到了这个示例源,它编译和填充,但我无法在任何地方看到图像文件。
这是代码:
#include <iostream>
#include <curl/curl.h>
#include <stdio.h>
using namespace std;
int main(){
CURL *image;
CURLcode imgresult;
FILE *fp;
image = curl_easy_init();
if( image ){
// Open file
fp = fopen("google.jpg", "wb");
if( fp == NULL ) cout << "File cannot be opened";
curl_easy_setopt(image, CURLOPT_URL, "http://192.168.16.25/cgi-bin/viewer/video.jpg");
curl_easy_setopt(image, CURLOPT_WRITEFUNCTION, NULL);
curl_easy_setopt(image, CURLOPT_WRITEDATA, fp);
// Grab image
imgresult = curl_easy_perform(image);
if( imgresult ){
cout << "Cannot grab the image!\n";
}
}
// Clean up the resources
curl_easy_cleanup(image);
// Close the file
fclose(fp);
return 0;
}
BTW我正在使用Mac,我正在XCode上编译这个代码,它有一个libcurl库。
* 编辑: *问题已解决。我刚刚使用了fopen()的完整路径。谢谢你!请回答这个问题,以便我可以选择你的正确答案。谢谢!
答案 0 :(得分:3)
在公开通话中使用完整路径,以便您知道在哪里寻找。
此外,您应该查看perror
函数,以便打印出打开失败的原因 - 节省一些麻烦。
最后一件事:将fp
初始化为null,或者只有fclose(fp)
才真正打开。就目前而言,如果curl_easy_init
失败,您将尝试fclose
随机指针。