正在检查登录状态... | 繁體中文 | 设为首页 | 加入收藏
点击:1962 | 评论:3 | 辅助功能: 复制 | 打印 | 字体: | |

Perl使用OAuth指南及sina(新浪)、sohu(搜狐)等微博验证方法

作者: 蓝天下云层上 发表于 最后更新于
版权声明:转载请征求作者同意,转载时必以超链接形式标明文章原始出处和作者信息及版权声明。
/blog/weblog-20570-1.html
Perl模块Net::OAuth
http://search.cpan.org/~kgrennan/Net-OAuth-0.27/lib/Net/OAuth.pm

安装
使用时需要的两个模块
1.Class::Data::Inheritable
2.Class::Accessor
如报错Unable to load HMAC_SHA1 plugin
还需要安装模块Digest-HMAC-1.02.tar.gz

tar -zxvf Class-Data-Inheritable-0.08.tar.gz
cd Class-Data-Inheritable-0.08
perl Makefile.PL
make
make install

tar -zxvf Class-Accessor-0.34.tar.gz
cd Class-Accessor-0.34
perl Makefile.PL
make
make install

tar -zxvf Digest-HMAC-1.02.tar.gz
cd Digest-HMAC-1.02
perl Makefile.PL
make
make install

tar -zxvf Net-OAuth-0.27.tar.gz
cd Net-OAuth-0.27
perl Makefile.PL
提示
This module requires Module::Build to install itself.
只能选择y
之后的安装时间有点久...
make
make install

OAUTH相关的三个URL:
Request Token URL: 获取未授权的Request Token服务地址;
User Authorization URL: 获取用户授权的Request Token服务地址;
Access Token URL: 用授权的Request Token换取Access Token的服务地址;

OAUTH相关的参数定义:
oauth_consumer_key: 使用者的ID,OAUTH服务的直接使用者是开发者开发出来的应用。所以该参数值的获取一般是要去OAUTH服务提供商处注册一个应用,再获取该应用的oauth_consumer_key。如Yahoo该值的注册地址为:https://developer.yahoo.com/dashboard/
oauth_consumer_secret:oauth_consumer_key对应的密钥。
oauth_signature_method: 请求串的签名方法,应用每次向OAUTH三个服务地址发送请求时,必须对请求进行签名。签名的方法有:HMAC-SHA1、RSA-SHA1与PLAINTEXT等三种。
oauth_signature: 用上面的签名方法对请求的签名。
oauth_timestamp: 发起请求的时间戳,其值是距1970 00:00:00 GMT的秒数,必须是大于0的整数。本次请求的时间戳必须大于或者等于上次的时间戳。
oauth_nonce: 随机生成的字符串,用于防止请求的重放,防止外界的非法攻击。
oauth_version: OAUTH的版本号,可选,其值必须为1.0或是1.0A。

sina(新浪)微博开放地址
http://open.t.sina.com.cn

sohu(搜狐)微博开放地址
http://open.t.sohu.com

编程中最容易出错的地方就是base_string,发送验证前把各个参数都打印出来,附调试结果:
[DEBUG Net::OAuth] STEP 1: REQUEST SINA OAUTH TOKEN FOR THIS APP
[DEBUG Net::OAuth] Request to_url: http://api.t.sina.com.cn/oauth/request_token?oauth_consumer_key=1438635265&oauth_nonce=4246522256&oauth_signature=TheHmxSds6qsyW81t6hMldWImJo%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1282726273&oauth_version=1.0
[DEBUG Net::OAuth] OAuth oauth_consumer_key="1438635265",oauth_nonce="4246522256",oauth_signature="TheHmxSds6qsyW81t6hMldWImJo%3D",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1282726273",oauth_version="1.0"
[DEBUG Net::OAuth] Got Request Token: d6dae74e04d0ee7bace452506fd2d7da
[DEBUG Net::OAuth] Got Request Token Secret: 3cdf787668b7a84d0320c4de8b7237ab
[DEBUG Net::OAuth] STEP 2: SINA OAUTH TOKEN RESPONSE
[DEBUG Net::OAuth] RESPONSE: oauth_token=d6dae74e04d0ee7bace452506fd2d7da&oauth_token_secret=3cdf787668b7a84d0320c4de8b7237ab
[DEBUG Net::OAuth] STEP 3: REQUEST SINA AUTHORIZATION FOR THIS APP
[DEBUG Net::OAuth] URL : http://api.t.sina.com.cn/oauth/authorize?oauth_token=d6dae74e04d0ee7bace452506fd2d7da&oauth_callback=http%3A%2F%2Fwww.imx365.net%2Foauth_sina_call.mpl
[DEBUG Net::OAuth] STEP 4: REQUEST SINA ACCESS TOKEN FOR THIS APP
[DEBUG Net::OAuth] URL: http://api.t.sina.com.cn/oauth/access_token?oauth_consumer_key=1438635265&oauth_nonce=1751305124&oauth_signature=RZ4PmNMdCRtY63PpLB3M5KdTXaM%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1282726282&oauth_token=d6dae74e04d0ee7bace452506fd2d7da&oauth_verifier=648405&oauth_version=1.0
[DEBUG Net::OAuth] OAuth oauth_consumer_key="1438635265",oauth_nonce="1751305124",oauth_signature="RZ4PmNMdCRtY63PpLB3M5KdTXaM%3D",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1282726282",oauth_token="d6dae74e04d0ee7bace452506fd2d7da",oauth_verifier="648405",oauth_version="1.0"
[DEBUG Net::OAuth] STEP 5: SINA ACCESS TOKEN RESPONSE
[DEBUG Net::OAuth] RESPONSE : oauth_token=da1f4b0654228d91631db0a2cda6873d&oauth_token_secret=23b6dc88688e5f6c7523eaf8c1a0a080&user_id=1795385984

Got Request Token da1f4b0654228d91631db0a2cda6873d
Got Request Token Secret 23b6dc88688e5f6c7523eaf8c1a0a080
base_string:GET&http%3A%2F%2Fapi.t.sina.com.cn%2Faccount%2Fverify_credentials.json&oauth_consumer_key%3D1438635265%26oauth_nonce%3D63234217%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1282726282%26oauth_token%3Dda1f4b0654228d91631db0a2cda6873d%26oauth_version%3D1.0%26source%3D1438635265
signature_key:01db700f9192d59fe82abb145af67237&23b6dc88688e5f6c7523eaf8c1a0a080
Authorization:OAuth oauth_consumer_key="1438635265",oauth_nonce="63234217",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1282726282",oauth_token="da1f4b0654228d91631db0a2cda6873d",oauth_version="1.0"
http://api.t.sina.com.cn/account/verify_credentials.json?oauth_consumer_key=1438635265&oauth_nonce=63234217&oauth_signature=ZVBwLOfq8eVu5dtTQ82mbC%2BdP%2Fc%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1282726282&oauth_token=da1f4b0654228d91631db0a2cda6873d&oauth_version=1.0&source=1438635265
{"id":1795385984...}
200 OK

此日志的引用通告 URL:
http://www.imx365.net/blog/tb.cgi/20570

其实我一直都不知道您在想些什么,有什么感触。说真的,您的评论对于我来说很重要...
评论
说:
你好,可否将以上内容的perl测试代码发给我?多谢~
--------------------
cx

cx(访客)

说:
楼主是我见过的第一个使用perl进行oauth验证的人,从文中看出,楼主验证成功,并且获得了请求的数据。
不过,没有代码,不知道具体怎么实现的。

另外:楼主的APPKEY都贴出来了,不怕泄露吗?
--------------------
Gao

Gao(访客)

说:
呵呵,小弟不才,perl的模块很多,进行oauth验证也无非就是验证需要的appkey了,代码量非常少,可以参考perl的oauth模快:Net::OAuth
--------------------
发表评论
  • (地址不公开)

(访客)