随着Twitter的兴起和国内Sina和QQ等公司的追随,微博现在是如日中天,将传统的SNS给完全比拼下去,微博对于大家来说完全是个尚未完全开采的大金矿,对于一直站在潮流最前端的程序员来说怎么能将这么好的机会错失呢。
在这里我抛砖引玉,先介绍下如何在Qt平台上编译QAuth来支持现在微博的通用认证OAuth,
根据Twitter的API Wiki,基本的OAuth验证workflow如下:
1. 程序利用http://api.twitter.com/oauth/request_token来从twitter.com那里获取一个request token。
2. 然后程序引导用户到http://api.twitter.com/oauth/authorize页面。
3. 用户如果同意授权,twitter.com则会显示一个7位数字的PIN码。
4. 用户需要将PIN码复制,然后回到程序那里。
5. 之后程序要提示用户输入得到的PIN码。
6. 然后程序将PIN码作为参数oauth_verifier的值,接着调用http://api.twitter.com/oauth/access_token去核实PIN码,从而将request_token 换成access_token。
7. Twitter之后会返回一个access_token,程序就此token来生成之后的OAuth签名。
OAuth本身不是很复杂,不过如果有个库可以作为验证的helper的话,就可以省事很多了,由于最近一直在用Qt做开发,在上篇文章中我介绍了Qt并介绍了如何在VS2010中编译Qt环境,如果对Qt不熟悉的朋友可以点这里查看。顺理成章的是我希望在Qt框架下找到一个能支持OAuth的类库来简化开发,通过放狗进行搜索,搜到有个QOAuth的东西,是在Qt下的OAuth库,不过仔细一看,原来在使用QOauth之前还需要OpenssL,QCA和QCA的OpenssL插件,晕啊!
闲话就不说了,咱们进入正题
- openssL
首先得到OpenssL的官网上下载OpenssL,http://www.openssl.org/,我下载的是openssl-1.0.0c.tar.gz,也是最新的,如果大家不想编译也可以到网上搜索别人编译好的库。
下载好后解压缩到硬盘中,我的路径是 H:\openssl-1.0.0c,由于OpenssL使用Perl生成makefile,所以需要先下载Perl,我下载的ActivePerl,下载好后进行安装。
Perl安装好后,运行Visual Studio Command Prompt (2010),不要运行普通的控制台。
键入命令 perl Configure VC-WIN32
如果输入错误会有明显提示,需要注意的是VC-W32必须是大写
等完成后键入命令 ms\do_ms
等完成后输入 nmake -f ms\ntdll.mak
编译成功后生成的lib,dll等库文件在out32dll中,头文件在include中,这些目录在以后的编译中需要加入到项目头文件目录和lib包含目录中。
- 编译支持OpenssL的Qt
由于默认情况下Qt编译出来时不支持OpenssL的,需要重新编译下Qt,囧。
基本步骤和我这篇文章 Qt简介以及如何配置Qt使用VS2010进行开发 中所描述的基本一致,唯一不同的在于configure的时候需要加上-openssl -I openssL头文件目录 -L openssLlib文件目录,如我的环境下是这样子滴
configure -platform win32-msvc2010 -openssl -I H:\openssl-1.0.0c\include -L H:\openssl-1.0.0c\out32dll
- QCA
QCA需要到这个网站http://delta.affinix.com/qca/下载,同样的这个网站提供的QCA的OpenssL插件下载
QCA我下载的 qca-2.0.3.tar.bz2
QCA的OpenssL插件我下载的是 qca-ossl-2.0.0-beta3.tar.bz2
下载好后解压缩到硬盘,我的路径是 H:\qca-2.0.3,打开系统的环境变量,将QTDIR加入系统环境变量,如图所示
打开VS2010,Qt菜单(如果没有这个菜单,请查看我的上一篇文章),Open Qt Project File(.pro),选择QCA的安装目录下的qca.pro,稍等一会儿,自动将PRO项目转换成VS2010项目并加载了QCA下的所有项目
工程下有很多项目,我们只要编译qca项目即可,直接编译会出错,需要进行下设置,展开qca项目,在Generated Files下的debug和release目录下找到qpipe.moc文件,右键属性,显示下图界面
在Command Line的最后面加上-DQ_OS_WIN,确定后,再编译,OK一切都安静了
- QCA的Openssl插件
下载好后解压缩到硬盘,在Visual Studio Command Prompt (2010)中进入压缩目录,我的是在H:\qca-ossl-2.0.0-beta3,执行下面命令: configwin rd
新建一个文本文件,输入WINLOCAL_PREFIX = C:/local,C:/Local可以是任何你想指定的目录,这个目录是作为零时文件的存放路径,将其保存到你的Qt目录下的mkspecs\features目录中,文件名为winlocal.prf,注意不要保存成文本文件,我的保存路径是H:\Qt\2010.05\qt\mkspecs\features,供大家参考。
打开VS2010,Qt菜单(如果没有这个菜单,请查看我的上一篇文章),Open Qt Project File(.pro),选择QCA的OpenSSL插件的的安装目录下的qca-ossl.pro,稍等一会儿生成了QCA的OpenSSL插件的VS项目。
将OpenssL的头文件路径和lib文件路径添加到项目中
在项目中搜索所有的EVP_md2,一共有4个,加上宏定义#ifndef OPENSSL_NO_MD2#endif,如图示,
编译之,在lib文件夹中获取劳动成果dll和lib文件两颗,拷贝进Qt的Plugins的crypto中,如果没有这个目录,手动建立目录。在以后编译的项目中需要将这个目录拷贝到exe文件的目录中即可。
- QOAuth
从QOAuth的官方网站https://github.com/ayoy/qoauth下载QOAuth,
在硬盘解压缩,我的目录是H:\ayoy-qoauth-18dbc19,通用的打开VS2010,Qt菜单(如果没有这个菜单,请查看我的上一篇文章),Open Qt Project File(.pro),选择QOAuth目录下的qoauth.pro,稍等片刻生成项目文件,在qoauth项目中的interface.h文件中点击右键,属性,如下图所示
将.\GeneratedFiles\$(ConfigurationName)\加入到include目录中,
编译qoauth项目,成功后在lib文件中找到dll和lib,
编译好之后得安装。具体做法是: 将oauth.prf复制到QTDIR\mkspecs\features里面, 将include和src复制到QTDIR\include里面,src里面只需有头文件即可 将生成的dll复制到QTDIR\lib,如果编译时候提示找不到这两个dll,可能是因为这是的dll名字包含版本号,去掉就ok了。
用了QOAuth之后,编译出来的程序需要 +OpenSSL的链接库:(如果不带上OpenSSL的话,程序仍然可以启动,QCA会显示插件不支持的,然后会中止程序,算是个小陷阱) -libeay32.dll,libssl32.dll,ssleay32.dll +QCA的链接库: -qcad2.dll +QOAuth的链接库 -qoauth1.dll/qoauthd1.dll。