问题
你是否也想让自己的 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-vc15-x86-release-dll-ssl-static.zip”提供了一个便捷的解决方案,让C++开发者能够在Win32环境下构建支持HTTPS的网络应用,而无需从零开始实现复杂的网络协议。通过这个压缩包,开发者可以直接将...
适用于centos 7
3. **编写源码**:使用libcurl提供的API编写网络请求代码,注意要处理Android特有的异步调用和权限问题。 4. **编译Android应用**:使用NDK的ndk-build命令或Android Studio的CMake构建系统,编译整个Android项目。...
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-vc15-x64-release-static-ipv6-sspi-schannel.rar" 暗示了这是一个针对Windows平台的libcurl库的特定版本。libcurl是一个开源的库,用于处理各种网络协议,如HTTP、FTP、SMTP等。这里的"vc15"指的是...
这个名为"libcurl-7.19.3-win32-ssl-msvc"的版本是针对Windows平台的,特别适用于32位系统,并且集成了SSL(Secure Sockets Layer)支持,意味着它能够处理加密的HTTPS连接。此外,它还与Microsoft Visual C++(MSVC...
libcurl
此外,还可以使用`CURLOPT_TCP_FASTOPEN`或`CURLOPT_RESUME_FROM`等选项优化网络连接速度。 ### 7. 结论 libcurl为开发者提供了方便、高效的HTTPS通信工具,只需简单几行代码即可实现安全的网络数据传输。但需要...
curl库的主要功能是用不同的协议连接不同的服务器,也就是相当封装了的socket的协议库, libcurl当前支持http, https, ftp, gopher, telnet, file等常用协议,libcurl也支持https证书授权,是网络程序开发的一把利器...
go-curl, golang curl(libcurl) 绑定 curl 我的golang libcurl(curl) 绑定。请参阅./examples/directory~中的更多示例 !许可证转到curl许可在Apache许可下,版本 2.0 ( http://www.apache.o
在window平台下,自己编译OpenSSL,Libcurl ,来支持HTTPS传输协议。官方libcurl仅支持HTTP。此curl,支持https,包括c++需要的头文件,lib,dll等,无需自己重新编译
《C++网络开发中的Libcurl库详解》 在C++编程领域,网络开发是一项重要的技能,而Libcurl作为一款强大的库,为开发者提供了便捷的HTTP及其他协议的数据传输能力。本篇将详细介绍Libcurl的使用、功能及与其他相关库...
`include`文件夹则包含libcurl的头文件,开发人员需要引用这些头文件来使用libcurl的API。 总的来说,集成支持HTTPS的libcurl意味着你可以构建安全的网络应用程序,不仅能够访问HTTPS网站,还能进行FTP传输和HTTP...
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
这通常使用libcurl的多模式接口(multi interface)实现,因为它可以同时处理多个连接。我们可以创建一个`HttpServer`类,它管理一个libcurl的多句柄上下文,并监听特定端口上的请求。当接收到请求时,`HttpServer`...
通过curl,用户可以在终端中直接发送HTTP请求,测试网络连接,或者从远程服务器下载文件。libcurl库则是curl工具背后的引擎,提供了更高级别的接口供开发者在他们的应用程序中使用。 **FTP和FTPS** 是文件传输协议...
在Android应用开发中,网络通信是必不可少的一部分,而libcurl是一个强大的开源库,广泛用于桌面和服务器端的网络数据传输。本篇文章将深入探讨如何将libcurl移植到Android平台,并利用其特性进行高效的网络编程。 ...
windows系统文件,安装软件缺少本文件时可以补上。
SSPI的集成则提供了身份验证服务,可以利用Windows操作系统内置的安全机制,如NTLM、Kerberos等,实现更加安全的网络连接。 WinSSL,即Windows的SSL/TLS实现,是libcurl与服务器进行加密通信的基础。通过使用WinSSL...