`

[转]使用libcurl连接https服务器

 
阅读更多

 

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 静态库。最终得到下面两个静态库文件。

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 *curlCURLcode 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使用Https说明

    **libcurl库与HTTPS传输详解** libcurl是一个强大的开源库,用于处理各种网络协议,包括HTTP、...通过阅读《libcurl使用说明.doc》文档,你可以找到更多关于libcurl的具体用法和实例,进一步提升你的HTTPS编程能力。

    openssl、libcurl、https访问服务器进行验证,并且得到服务器证书

    2. **查看证书信息**:使用`openssl s_client`连接到HTTPS服务器,可以查看服务器返回的证书详情,包括证书的发行者、有效期、主题等。 接下来,libcurl是一个强大的URL传输库,支持多种协议,包括HTTPS。在C/C++等...

    支持https的libcurl静态库(openssl)

    在标题中提到的“支持https的libcurl静态库(openssl)”,指的是libcurl库已经集成了openssl库,使得它能够处理加密的HTTPS连接。openssl是广泛使用的开源密码学软件库,提供了SSL/TLS协议以及各种加密算法,对于...

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

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

    ios中利用libcurl上传文件到ftp服务器

    ios中利用libcurl上传文件到ftp服务器

    libcurl for Android支持ssl

    在Android应用开发中,libcurl的使用可以帮助开发者轻松实现数据的上传和下载功能,特别是在处理SSL/TLS加密的HTTPS连接时。本篇文章将深入探讨如何在Android环境下集成并使用libcurl,特别关注其对ssl的支持,以及...

    libcurl安卓通信库支持https

    libcurl是一个广泛使用的开源库,专门用于在各种操作系统上,包括Android,进行文件传输和网络通信。这个库支持多种协议,其中包括HTTP、HTTPS、FTP、SMTP等,使得开发者能够轻松地实现应用程序与服务器之间的数据...

    使用libcurl发送邮件实例,实现smtp/smtp方式,基于VS C++

    在使用libcurl发送邮件前,确保已正确配置了项目设置,包括添加libcurl的头文件和库文件路径。对于VS2015,你可能需要将静态库文件(如libcurl.lib)添加到项目的链接器输入中,并包含对应的头文件(如`curl/curl.h`...

    LibCurl带证书的

    - **证书配置**:在使用LibCurl进行HTTPS请求时,可以设置自定义的证书和私钥,或者指定信任的CA(证书颁发机构)列表。 - **证书验证**:默认情况下,LibCurl会进行证书验证,如果服务器证书不能通过验证,请求会...

    ios libcurl库的简单使用

    本篇文章将深入探讨如何在iOS项目中集成和使用libcurl库进行网络通信。 首先,我们需要在iOS项目中引入libcurl库。这通常可以通过CocoaPods或手动添加库文件完成。使用CocoaPods,我们可以在Podfile中添加`pod '...

    libcurl静态库[支持https]

    libcurl通过内置对SSL的支持,能够与HTTPS服务器建立安全连接。它支持多种SSL后端实现,如OpenSSL、GnuTLS、Secure Transport等。这些后端提供了加密算法和证书验证等功能,使得libcurl可以安全地与各种HTTPS服务器...

    iOS端libcurl静态库

    需要注意的是,由于iOS安全策略,如果涉及到SSL/TLS连接,可能需要配置App Transport Security (ATS) 的例外,允许应用与不使用现代加密标准的服务器进行通信。 总的来说,libcurl为iOS开发者提供了一套强大且灵活...

    libcurl文件压缩包

    libcurl主要功能就是用不同的协议连接和沟通不同的服务器~也就是相当封装了的sockPHP 支持libcurl(允许你用不同的协议连接和沟通不同的服务器)。, libcurl当前支持http, https, ftp, gopher, telnet, dict, file, ...

    C++ libcurl ftp上传文件

    本篇将深入探讨如何使用C++和libcurl库进行FTP文件上传。 FTP是一种在互联网上用于传输文件的标准协议,而libcurl为C++程序员提供了一个简洁的接口来实现这个功能。首先,你需要在你的项目中包含libcurl库。确保你...

    java通过jni调用libcurl,curl java

    libcurl主要功能就是用不同的协议连接和沟通不同的服务器~也就是相当封装了的sockPHP 支持libcurl(允许你用不同的协议连接和沟通不同的服务器)。, libcurl当前支持http, https, ftp, gopher, telnet, dict, file, ...

    libcurl使用demo【更新】

    **libcurl库详解与使用示例** libcurl是一个强大的开源库,用于在各种协议下进行文件传输,包括HTTP、HTTPS、FTP、FTPS等。它提供了丰富的API接口,使得开发者可以方便地在C/C++程序中实现网络通信功能。本教程将...

    libcurl进行ftp的demo

    在主动模式下,客户端指定一个端口等待服务器的数据连接;在被动模式下,服务器开启一个随机端口并告知客户端,客户端再建立到该端口的数据连接。 libcurl是一个开源的C库,它支持多种网络协议,包括FTP、HTTP、...

    支持https的libcurl.zip

    在libcurl中集成OpenSSL,意味着该库能够处理HTTPS连接,支持安全的网页数据传输。 libcurl库不仅支持HTTPS,还支持FTP和HTTP表单提交等多种网络协议。FTP(File Transfer Protocol)是一种用于在网络上进行文件...

Global site tag (gtag.js) - Google Analytics