使用libcurl连接https服务器
2011-04-15 10:20
239 查看
问题
你是否也想让自己的 iPhone 应用程序连接 https 服务器呢?下面我就介绍一下其使用方法。通常使用 Objective-C 的 NSURLConnection 连接有证明书的 https 服务器时会出现验证错误,我们可以使用私有API — setAllowsAnyHTTPSCertificate:forHost 来解决这个问题。如果是 Cocoa 的应用程序应该是没有什么问题,但是用在 iPhone 上,很可能过不了 App Store 的审查。
所以这里我们使用 libcurl 来完成在 iphone 上连接 https 服务器。
准备
编译 openssl
连接 https 的前提是要有 OpenSSL。你可以参考 这里 来为 iPhone 编译 OpenSSL 静态库。最终得到下面两个静态库文件。1 2 | libcrypto.a libssl.a |
编译 libcurl
接下来我们下载/编译 libcurl。下载展开后,按照下面配置(根据实际情况更改你的SDK目录,版本)。1 23 | ./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 |
1 | SSL support: enabled (OpenSSL) |
1 2 | make make install |
使用
添加到工程中
如下图所示,将编译好的静态库拖到你的工程中:另外,由于 openssl 中使用了 zlib,所以还需要在工程中加入链接开关。(该库被包含在iPhone中,不需要重新编译)
如下图所示,在连接中追加 -lz。
最后,如下图添加编译所需的头文件路径。
比如,编译 libcurl 时的头文件的路径 ~/tmp/iphonelib/curl/include 。
代码例子
下来,让我们看看在程序中使用 libcurl 的例子。下面的例子在 AppDelegate.m 中实现。1 23 | #import "AppDelegate.h" #include <curl/curl.h> @implementation AppDelegate -(void)applicationDidFinishLaunching:(UIApplication *)application { window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch [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 |
在模拟器中使用 libcurl
上面介绍的都是在设备上运行的例子,如果要在模拟器上使用,由于处理器结构不一样,需要重新编译 openssl 和 curl 静态库。编译的时候,只要将 SDK 的路径由 iPhoneOS.platform ⇒ iPhoneSimulator.platform,编译开关 -arch armv6 ⇒ -arch i386 就可以了。
只是编译的文件名最好和iphone上用的区别开来,如下所示:
1 23 | libcrypto_simulator.a libssl_simulator.a libcurl_simulator.a |
相关文章推荐
- iPhone开发技巧之网络篇(5)--- 使用libcurl连接https服务器
- 设置Outlook客户端连接Exchange 2010服务器在低速或高速网络均使用https
- libevent和libcurl实现http和https服务器 cJSON使用
- 如何使用php判断服务器是否是HTTPS连接
- 如何使用php判断服务器是否是HTTPS连接
- 如何使用php判断服务器是否是HTTPS连接
- HTTPS-HSTS协议(强制客户端使用HTTPS与服务器创建连接)
- 不安装Oracle客户端,使用PLSQL连接Oracle服务器
- 64位服务器无法使用access,数据库连接字符串修改
- win2000服务器在IIS中使用SSL配置HTTPS网站
- nodejs生成的证书转换成cer文件便于在ios中使用--附Nodejs创建HTTPS服务器,并且生成证书
- 使用nginx搭建https服务器
- python 使用ssh连接服务器进行远程命令行操作
- 使用navicat建立与服务器的远程mysql连接
- 使用远程连接工具Xshell连接服务器
- WebLogic下使用URL.openConnection获取连接返回 HttpsURLConnection与SOAPHttpsURLConnection的问题
- Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端
- 使用Navicat for Mysql连接mysql服务器
- Apache http 服务器如何启用和设置 https 连接以提供加密的 http 通讯教程
- 使用 Alfred workflow 自动连接 samba 服务器