iPhone开发技巧之网络篇(5)--- 使用libcurl连接https服务器
来源:互联网 发布:淘宝网中年雪纺连衣裙 编辑:程序博客网 时间:2024/06/05 07:28
问题
你是否也想让自己的 iPhone 应用程序连接 https 服务器呢?下面我就介绍一下其使用方法。
通常使用 Objective-C 的 NSURLConnection 连接有证明书的 https 服务器时会出现验证错误,我们可以使用私有API — setAllowsAnyHTTPSCertificate:forHost 来解决这个问题。如果是 Cocoa 的应用程序应该是没有什么问题,但是用在 iPhone 上,很可能过不了 App Store 的审查。
所以这里我们使用 libcurl 来完成在 iphone 上连接 https 服务器。
准备
编译 openssl
连接 https 的前提是要有 OpenSSL。你可以参考 这里 来为 iPhone 编译 OpenSSL 静态库。最终得到下面两个静态库文件。
12
libcrypto.alibssl.a
编译 libcurl
接下来我们下载/编译 libcurl。下载展开后,按照下面配置(根据实际情况更改你的SDK目录,版本)。
123456
./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)
接下来
12
makemake install
编译结果输出到 ~/tmp/iphonelib/curl/lib 下的 libcurl.a。
使用
添加到工程中
如下图所示,将编译好的静态库拖到你的工程中:
另外,由于 openssl 中使用了 zlib,所以还需要在工程中加入链接开关。(该库被包含在iPhone中,不需要重新编译)
如下图所示,在连接中追加 -lz。
最后,如下图添加编译所需的头文件路径。
比如,编译 libcurl 时的头文件的路径 ~/tmp/iphonelib/curl/include 。
代码例子
下来,让我们看看在程序中使用 libcurl 的例子。下面的例子在 AppDelegate.m 中实现。
12345678910111213141516171819202122232425262728293031323334
#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
编译运行,可以用调试工具得到取得的html,如下图。
在模拟器中使用 libcurl
上面介绍的都是在设备上运行的例子,如果要在模拟器上使用,由于处理器结构不一样,需要重新编译 openssl 和 curl 静态库。
编译的时候,只要将 SDK 的路径由 iPhoneOS.platform ⇒ iPhoneSimulator.platform,编译开关 -arch armv6 ⇒ -arch i386 就可以了。
只是编译的文件名最好和iphone上用的区别开来,如下所示:
123
libcrypto_simulator.alibssl_simulator.alibcurl_simulator.a
又或者不改变库的名称,而是增加新的编译目标。
- iPhone开发技巧之网络篇(5)--- 使用libcurl连接https服务器
- 使用libcurl连接https服务器
- iPhone开发技巧之网络篇(3)--- 使用NSOperation建立多任务网络连接
- iPhone开发技巧之网络篇(1)--- 解析XML
- iPhone开发技巧之网络篇(2)--- Web服务
- iPhone开发技巧之网络篇(1)--- 解析XML
- Cocos2d—X游戏开发之LibCurl高级篇(get,post服务器数据)(网络详细参数信息)
- iPhone开发技巧之环境篇(1)--- 使用Emacs开发iPhone应用程序
- iPhone开发技巧之网络篇(4)--- 确认网络环境 3G/WIFI
- iPhone开发技巧之网络篇(4)--- 确认网络环境 3G/WIFI
- iPhone开发技巧之网络篇(4)--- 确认网络环境
- iPhone开发技巧之网络篇— 解析XML
- iPhone开发技巧之网络--- Web服务
- iPhone开发技巧之网络篇(1)— 解析XML
- iPhone应用程序 HTTPS服务器连接教程
- iPhone开发之NSLog使用技巧
- libcurl网络连接使用tcp/ip
- libcurl网络连接使用tcp/ip
- 推荐19个很有用的 JavaScript 库
- 让apache选择性的决绝某些user-agent
- 单片机驱动DM9000网卡芯片详细调试过程
- iPhone开发技巧之网络篇(3)--- 使用NSOperation建立多任务网络连接
- iPhone开发技巧之网络篇(4)--- 确认网络环境 3G/WIFI
- iPhone开发技巧之网络篇(5)--- 使用libcurl连接https服务器
- GridEx选中第一项的方法
- 一切从今天开始
- ActiveMQ JMS 在发邮件中的使用
- 面试归来
- ARM上的异常处理和简单汇编
- Jquery UI dialog 详解 (中文)
- 无题
- apache服务器的fin_wait1过多time_wait过多问题解决