http://blog.csdn.net/xinghexiyue/article/details/6324915
问题
你是否也想让自己的 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服务器,以实现安全的数据传输。 首先,理解HTTPS(HyperText Transfer Protocol Secure)是HTTP的安全版本,它通过SSL/TLS协议提供加密通信和身份认证,确保...
**libcurl库与HTTPS传输详解** libcurl是一个强大的开源库,用于处理各种网络协议,包括HTTP、...通过阅读《libcurl使用说明.doc》文档,你可以找到更多关于libcurl的具体用法和实例,进一步提升你的HTTPS编程能力。
2. **查看证书信息**:使用`openssl s_client`连接到HTTPS服务器,可以查看服务器返回的证书详情,包括证书的发行者、有效期、主题等。 接下来,libcurl是一个强大的URL传输库,支持多种协议,包括HTTPS。在C/C++等...
在标题中提到的“支持https的libcurl静态库(openssl)”,指的是libcurl库已经集成了openssl库,使得它能够处理加密的HTTPS连接。openssl是广泛使用的开源密码学软件库,提供了SSL/TLS协议以及各种加密算法,对于...
这通常使用libcurl的多模式接口(multi interface)实现,因为它可以同时处理多个连接。我们可以创建一个`HttpServer`类,它管理一个libcurl的多句柄上下文,并监听特定端口上的请求。当接收到请求时,`HttpServer`...
ios中利用libcurl上传文件到ftp服务器
在Android应用开发中,libcurl的使用可以帮助开发者轻松实现数据的上传和下载功能,特别是在处理SSL/TLS加密的HTTPS连接时。本篇文章将深入探讨如何在Android环境下集成并使用libcurl,特别关注其对ssl的支持,以及...
libcurl是一个广泛使用的开源库,专门用于在各种操作系统上,包括Android,进行文件传输和网络通信。这个库支持多种协议,其中包括HTTP、HTTPS、FTP、SMTP等,使得开发者能够轻松地实现应用程序与服务器之间的数据...
在使用libcurl发送邮件前,确保已正确配置了项目设置,包括添加libcurl的头文件和库文件路径。对于VS2015,你可能需要将静态库文件(如libcurl.lib)添加到项目的链接器输入中,并包含对应的头文件(如`curl/curl.h`...
- **证书配置**:在使用LibCurl进行HTTPS请求时,可以设置自定义的证书和私钥,或者指定信任的CA(证书颁发机构)列表。 - **证书验证**:默认情况下,LibCurl会进行证书验证,如果服务器证书不能通过验证,请求会...
本篇文章将深入探讨如何在iOS项目中集成和使用libcurl库进行网络通信。 首先,我们需要在iOS项目中引入libcurl库。这通常可以通过CocoaPods或手动添加库文件完成。使用CocoaPods,我们可以在Podfile中添加`pod '...
libcurl通过内置对SSL的支持,能够与HTTPS服务器建立安全连接。它支持多种SSL后端实现,如OpenSSL、GnuTLS、Secure Transport等。这些后端提供了加密算法和证书验证等功能,使得libcurl可以安全地与各种HTTPS服务器...
需要注意的是,由于iOS安全策略,如果涉及到SSL/TLS连接,可能需要配置App Transport Security (ATS) 的例外,允许应用与不使用现代加密标准的服务器进行通信。 总的来说,libcurl为iOS开发者提供了一套强大且灵活...
libcurl主要功能就是用不同的协议连接和沟通不同的服务器~也就是相当封装了的sockPHP 支持libcurl(允许你用不同的协议连接和沟通不同的服务器)。, libcurl当前支持http, https, ftp, gopher, telnet, dict, file, ...
本篇将深入探讨如何使用C++和libcurl库进行FTP文件上传。 FTP是一种在互联网上用于传输文件的标准协议,而libcurl为C++程序员提供了一个简洁的接口来实现这个功能。首先,你需要在你的项目中包含libcurl库。确保你...
libcurl主要功能就是用不同的协议连接和沟通不同的服务器~也就是相当封装了的sockPHP 支持libcurl(允许你用不同的协议连接和沟通不同的服务器)。, libcurl当前支持http, https, ftp, gopher, telnet, dict, file, ...
**libcurl库详解与使用示例** libcurl是一个强大的开源库,用于在各种协议下进行文件传输,包括HTTP、HTTPS、FTP、FTPS等。它提供了丰富的API接口,使得开发者可以方便地在C/C++程序中实现网络通信功能。本教程将...
在主动模式下,客户端指定一个端口等待服务器的数据连接;在被动模式下,服务器开启一个随机端口并告知客户端,客户端再建立到该端口的数据连接。 libcurl是一个开源的C库,它支持多种网络协议,包括FTP、HTTP、...
在libcurl中集成OpenSSL,意味着该库能够处理HTTPS连接,支持安全的网页数据传输。 libcurl库不仅支持HTTPS,还支持FTP和HTTP表单提交等多种网络协议。FTP(File Transfer Protocol)是一种用于在网络上进行文件...