iOS编译curl+OpenSSL并实现文件下载
iOS 下折腾curl配openssl,说实话,刚开始真挺麻烦的。但有时候,项目需求就是不能用NSURLSession,尤其涉及老代码或者跨平台库时,curl+openssl组合就派上用场了。
官方源码直接下:curl官网,openssl在 GitHub。下好后先解压,准备搞编译。记得环境要配好,Xcode + Command Line Tools是标配,不然一堆命令会直接报错。
编openssl那一步最关键,命令类似:
./Configure darwin64-arm64-cc -prefix /你的输出目录 no-shared
make && make install
去搞curl,指定好--with-ssl路径,还有一堆--disable选项,能精简就精简,编译更快:
./configure --host=arm-apple-darwin --with-ssl=/path/to/openssl --disable-ftp --disable-file ...
make && make install
搞完之后,静态库就出来了,用.a文件直接集成到 Xcode 项目里,头文件也别忘了加。
下载文件的逻辑也不复杂,curl有标准 API,用个write_callback把数据写进沙盒路径:
#include
size_t write_callback(void *ptr, size_t size, size_t nmemb, void *stream) {
return fwrite(ptr, size, nmemb, (FILE *)stream);
}
int main() {
FILE *fp = fopen("/沙盒路径/file", "wb");
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/file");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
curl_easy_perform(curl);
curl_easy_cleanup(curl);
fclose(fp);
return 0;
}
写代码前别忘了在Info.plist加NSAppTransportSecurity设置,要么开启Allow Arbitrary Loads,要么加白名单域名。不然 HTTPS 连不上。
,这种做法虽然比较折腾,但在一些对网络协议控制比较细的场景里,还真挺有用的。如果你对NSURLSession不满意,又想自己掌控连接过程,试试看吧。
文件大小:5.81MB
评论区