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
文件大小:
评论区