问题
你是否也想让自己的 iPhone 应用程序连接 https 服务器呢?下面我就介绍一下其使用方法。
通常使用 Objective-C 的 NSURLConnection 连接有证明书的 https 服务器时会出现验证错误,我们可以使用私有API — setAllowsAnyHTTPSCertificate:forHost 来解决这个问题。如果是 Cocoa 的应用程序应该是没有什么问题,但是用在 iPhone 上,很可能过不了 App Store 的审查。
所以这里我们使用 libcurl 来完成在 iphone 上连接 https 服务器。
准备
编译 openssl
连接 https 的前提是要有 OpenSSL。你可以参考 这里 来为 iPhone 编译 OpenSSL 静态库。最终得到下面两个静态库文件。
编译 libcurl
接下来我们下载/编译 libcurl。下载展开后,按照下面配置(根据实际情况更改你的SDK目录,版本)。
1
2
3
4
5
6
|
./configure --prefix=$HOME/tmp/iphonelib/curl \
--host=arm-apple-darwin --disable-shared --with-random=/dev/urandom \
CC=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc \
CFLAGS="-arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk -I$HOME/tmp/iphonelib/openssl/include -L$HOME/tmp/iphonelib/openssl/lib" \
CPP=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/cpp \
AR=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ar
|
如果最后输出下面的内容,说明可以编译支持 https 的 libcurl 了。
1
|
SSL support: enabled (OpenSSL)
|
接下来
编译结果输出到 ~/tmp/iphonelib/curl/lib 下的 libcurl.a。
使用
添加到工程中
如下图所示,将编译好的静态库拖到你的工程中:
另外,由于 openssl 中使用了 zlib,所以还需要在工程中加入链接开关。(该库被包含在iPhone中,不需要重新编译)
如下图所示,在连接中追加 -lz。
最后,如下图添加编译所需的头文件路径。
比如,编译 libcurl 时的头文件的路径 ~/tmp/iphonelib/curl/include 。
代码例子
下来,让我们看看在程序中使用 libcurl 的例子。下面的例子在 AppDelegate.m 中实现。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#import "AppDelegate.h"
#include <curl/curl.h>
@implementation AppDelegate
-(void)applicationDidFinishLaunching:(UIApplication *)application {
window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[window makeKeyAndVisible];
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://twitter.com/");
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
res = curl_easy_perform(curl);
if (0 != res) {
fprintf(stderr, "curl error: %d\n", res);
}
curl_easy_cleanup(curl);
}
}
-(void)dealloc {
[window release];
[super dealloc];
}
@end
|
编译运行,可以用调试工具得到取得的html,如下图。
在模拟器中使用 libcurl
上面介绍的都是在设备上运行的例子,如果要在模拟器上使用,由于处理器结构不一样,需要重新编译 openssl 和 curl 静态库。
编译的时候,只要将 SDK 的路径由 iPhoneOS.platform ⇒ iPhoneSimulator.platform,编译开关 -arch armv6 ⇒ -arch i386 就可以了。
只是编译的文件名最好和iphone上用的区别开来,如下所示:
1
2
3
|
libcrypto_simulator.a
libssl_simulator.a
libcurl_simulator.a
|
又或者不改变库的名称,而是增加新的编译目标。
分享到:
相关推荐
本文档描述了如何使用libcurl连接https服务器
libcurl-7.29 rpm packagelibcurl-7.29 rpm packagelibcurl-7.29 rpm packagelibcurl-7.29 rpm packagelibcurl-7.29 rpm packagelibcurl-7.29 rpm package
libcurl
go-curl, golang curl(libcurl) 绑定 curl 我的golang libcurl(curl) 绑定。请参阅./examples/directory~中的更多示例 !许可证转到curl许可在Apache许可下,版本 2.0 ( http://www.apache.o
curl7.65.3 带https win32 c++开发库 包含include lib bin文件夹,默认的curl是不带https的,所以编译一个带https方便大家使用
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
libcurl.a 支持armeabi,armeabi-v7, x86平台下 的使用, 通过java jni调用,可以完成jni写的native网络请求,满足get,post等请求方式。libcurl是一个功能非常强大的c 开源网络库,
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
curl库的主要功能是用不同的协议连接不同的服务器,也就是相当封装了的socket的协议库, libcurl当前支持http, https, ftp, gopher, telnet, file等常用协议,libcurl也支持https证书授权,是网络程序开发的一把利器...
官方离线安装包,亲测可用
适用于centos 7
windows系统文件,安装软件缺少本文件时可以补上。
libcurl使用Https说明,使用此文档里面有资源。帮助开发基于SOCKET的HTTPS传输协议。(描述可能不详)
centos6安装zabbix时所需要的libcurl-devel依赖包,用rpm安装
liburl 7.55 已经编译成lib静态库,包含头文件 文档结构: bin\ bin\curl.exe include\ include\.. lib\ lib\libcurl_a.lib
surport https libcurl ,build in VS2015
libcurl-video-tutorials:有关如何使用libcurl编写Internet客户端的视频教程
ios中利用libcurl上传文件到ftp服务器
在window平台下,自己编译OpenSSL,Libcurl ,来支持HTTPS传输协议。官方libcurl仅支持HTTP。此curl,支持https,包括c++需要的头文件,lib,dll等,无需自己重新编译
c++使用libcurl上传和下载资源,封装了库,带lib文件,带nodejs测试服务端