我有一个简单的问题。是否可以编写简单的代码从互联网(从URL到磁盘)下载文件而不使用像curl这样的C ++(用于mac osx)库? 我看过一些例子,但所有这些都使用了Curl库。
我在我的xcode projet上使用此代码。但我有一些编译(链接)错误
#define CURL_STATICLIB
#include <stdio.h>
#include <curl/curl.h>
#include <curl/types.h>
#include <curl/easy.h>
#include <string>
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
size_t written;
written = fwrite(ptr, size, nmemb, stream);
return written;
}
int main(void) {
CURL *curl;
FILE *fp;
CURLcode res;
char *url = "http://localhost/aaa.txt";
char outfilename[FILENAME_MAX] = "bbb.txt";
curl = curl_easy_init();
if (curl) {
fp = fopen(outfilename,"wb");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
fclose(fp);
}
return 0;
}
如何将curl库链接到我的xcode项目?
答案 0 :(得分:1)
你可以启动一个控制台命令,这很简单:D
system("curl -o ...")
或
system("wget ...")
答案 1 :(得分:0)
你必须学习一些“套接字编程”并实现一个非常基本的HTTP协议;极简主义的是将"GET /this/path/to/file.png HTTP/1.0\r\n"
之类的字符串发送到网站;然后,它可能会回答一个HTTP头,你必须解析至少知道后面的二进制数据的长度(如果请求成功,否则你必须处理HTTP错误,或者像html页面那样意外的contet类型)
This guide应该为您提供基本的开始;关于HTTP,这取决于你的需要,有时发送“原始”GET就足够了,有时候不行。
修改强>
更改为假装请求来自HTTP / 1兼容客户端,因为HTTP / 1.1希望发送主机头,正如评论者正确指出的那样。
<强> EDIT2 强>
OP改变了问题,这成为了如何与Xcode中的库链接的问题。已经有similar question on SO了。
答案 2 :(得分:0)