`
isiqi
  • 浏览: 16492100 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

iPhone开发技巧之网络篇(5)--- 使用libcurl连接https服务器

阅读更多

问题

你是否也想让自己的 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
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)

接下来

1
2
make
make install

编译结果输出到 ~/tmp/iphonelib/curl/lib 下的 libcurl.a。

使用

添加到工程中

如下图所示,将编译好的静态库拖到你的工程中:


libcurl iphone https

另外,由于 openssl 中使用了 zlib,所以还需要在工程中加入链接开关。(该库被包含在iPhone中,不需要重新编译)

如下图所示,在连接中追加 -lz。


libcurl iphone https

最后,如下图添加编译所需的头文件路径。


libcurl iphone https

比如,编译 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]];

    // 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 iphone https

在模拟器中使用 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连接到HTTPS服务器,以实现安全的数据传输。 首先,理解HTTPS(HyperText Transfer Protocol Secure)是HTTP的安全版本,它通过SSL/TLS协议提供加密通信和身份认证,确保...

    libcurl-vc15-x86-release-dll-ssl-static.zip

    总之,“libcurl-vc15-x86-release-dll-ssl-static.zip”提供了一个便捷的解决方案,让C++开发者能够在Win32环境下构建支持HTTPS的网络应用,而无需从零开始实现复杂的网络协议。通过这个压缩包,开发者可以直接将...

    libcurl-devel 7.87.0安装包

    适用于centos 7

    libcurl在android下的移植、编译与测试源码

    3. **编写源码**:使用libcurl提供的API编写网络请求代码,注意要处理Android特有的异步调用和权限问题。 4. **编译Android应用**:使用NDK的ndk-build命令或Android Studio的CMake构建系统,编译整个Android项目。...

    libcurl-7.29 rpm package

    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

    标题 "libcurl-vc15-x64-release-static-ipv6-sspi-schannel.rar" 暗示了这是一个针对Windows平台的libcurl库的特定版本。libcurl是一个开源的库,用于处理各种网络协议,如HTTP、FTP、SMTP等。这里的"vc15"指的是...

    libcurl库 libcurl-7.19.3-win32-ssl-msvc

    这个名为"libcurl-7.19.3-win32-ssl-msvc"的版本是针对Windows平台的,特别适用于32位系统,并且集成了SSL(Secure Sockets Layer)支持,意味着它能够处理加密的HTTPS连接。此外,它还与Microsoft Visual C++(MSVC...

    libcurl-devel-7.19.7-46.el6.x86_64.rpm

    libcurl

    libcurl使用Https说明

    此外,还可以使用`CURLOPT_TCP_FASTOPEN`或`CURLOPT_RESUME_FROM`等选项优化网络连接速度。 ### 7. 结论 libcurl为开发者提供了方便、高效的HTTPS通信工具,只需简单几行代码即可实现安全的网络数据传输。但需要...

    libcurl移植到嵌入式ARM以及使用参考

    curl库的主要功能是用不同的协议连接不同的服务器,也就是相当封装了的socket的协议库, libcurl当前支持http, https, ftp, gopher, telnet, file等常用协议,libcurl也支持https证书授权,是网络程序开发的一把利器...

    go-curl, golang curl(libcurl) 绑定.zip

    go-curl, golang curl(libcurl) 绑定 curl 我的golang libcurl(curl) 绑定。请参阅./examples/directory~中的更多示例 !许可证转到curl许可在Apache许可下,版本 2.0 ( http://www.apache.o

    libcurl支持https协议

    在window平台下,自己编译OpenSSL,Libcurl ,来支持HTTPS传输协议。官方libcurl仅支持HTTP。此curl,支持https,包括c++需要的头文件,lib,dll等,无需自己重新编译

    c++网络开发libcurl

    《C++网络开发中的Libcurl库详解》 在C++编程领域,网络开发是一项重要的技能,而Libcurl作为一款强大的库,为开发者提供了便捷的HTTP及其他协议的数据传输能力。本篇将详细介绍Libcurl的使用、功能及与其他相关库...

    支持HTTPS的libcurl

    `include`文件夹则包含libcurl的头文件,开发人员需要引用这些头文件来使用libcurl的API。 总的来说,集成支持HTTPS的libcurl意味着你可以构建安全的网络应用程序,不仅能够访问HTTPS网站,还能进行FTP传输和HTTP...

    libcurl-devel-7.29.0-59.el7.x86_64.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    qt下libcurl的封装和使用(包含库封装、库调用、http服务器)

    这通常使用libcurl的多模式接口(multi interface)实现,因为它可以同时处理多个连接。我们可以创建一个`HttpServer`类,它管理一个libcurl的多句柄上下文,并监听特定端口上的请求。当接收到请求时,`HttpServer`...

    libcurl_vc14.rar

    通过curl,用户可以在终端中直接发送HTTP请求,测试网络连接,或者从远程服务器下载文件。libcurl库则是curl工具背后的引擎,提供了更高级别的接口供开发者在他们的应用程序中使用。 **FTP和FTPS** 是文件传输协议...

    Android-网络编程利器libcurl的android移植封装

    在Android应用开发中,网络通信是必不可少的一部分,而libcurl是一个强大的开源库,广泛用于桌面和服务器端的网络数据传输。本篇文章将深入探讨如何将libcurl移植到Android平台,并利用其特性进行高效的网络编程。 ...

    libcurl.dll libcurl-4.dll

    windows系统文件,安装软件缺少本文件时可以补上。

    libcurl库编译后结果,可直接使用

    SSPI的集成则提供了身份验证服务,可以利用Windows操作系统内置的安全机制,如NTLM、Kerberos等,实现更加安全的网络连接。 WinSSL,即Windows的SSL/TLS实现,是libcurl与服务器进行加密通信的基础。通过使用WinSSL...

Global site tag (gtag.js) - Google Analytics