如何使用 Perl 和 LWP::UserAgent 更新我的 Twitter 状态? [英] How can I update my Twitter status with Perl and only LWP::UserAgent?

查看:61
本文介绍了如何使用 Perl 和 LWP::UserAgent 更新我的 Twitter 状态?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过 Twitter API 和 OAuth 更新我的状态.

I'm trying to update my status through the Twitter API and OAuth.

我在最后一步卡住了,状态更新.这是我的代码.

I get stuck on the last step, the status update. Here's my code.

标题:

$ua->default_header('Content-Type' => "application/x-www-form-urlencoded");
$ua->default_header('oauth_signature' => "$signature");
$ua->default_header('Authorization' => '"OAuth realm="Twitter API"');
$ua->default_header('oauth_consumer_key' => "blablabla");
$ua->default_header('oauth_nonce' => "$nonce");
$ua->default_header('oauth_signature_method' => "HMAC-SHA1");
$ua->default_header('oauth_timestamp' => "$epoch");
$ua->default_header('oauth_token' => "$token_final");
$ua->default_header('oauth_version' => "1.0");

发布到 http://api.twitter.com/1/statuses/update.json 用 lwp 用户代理制作:

The post to http://api.twitter.com/1/statuses/update.json made with lwp useragent:

'oauth_signature'=>"$signature",
'status'=>'Bientot',
'oauth_consumer_key'=>'blabla',
'oauth_signature_method'=>'HMAC-SHA1',
'oauth_nonce'=>"$nonce",
'oauth_timestamp'=>"$epoch",
'oauth_token'=>"$token_final",
'oauth_version'=>"1.0", 

我得到了什么:

HTTP/1.1 401 Unauthorized
Cache-Control: no-cache, max-age=300
Connection: close
Date: Wed, 29 Sep 2010 14:36:48 GMT
Server: hi
Vary: Accept-Encoding
WWW-Authenticate: Basic realm="Twitter API"
Content-Length: 75
Content-Type: application/json; charset=utf-8
Expires: Wed, 29 Sep 2010 14:41:48 GMT
Client-Date: Wed, 29 Sep 2010 14:36:49 GMT
Client-Peer: 128.242.240.29:80
Client-Response-Num: 1
Set-Cookie: _twitter_sess=BAh7DjoTc2hvd19oZWxwX2xpbmswOg5yZXR1cm5fdG8iYWh0dHA6Ly9hcGku%250AdHdpdHRlci5jb20vb2F1dGgvYXV0aG9yaXplP29hdXRoX3Rva2VuPXpMc2d2%250AV2U5aHBvSWNOSW5rOFFkYUNrN1NQSlozZW1VcUNpckNxWkZvOhVpbl9uZXdf%250AdXNlcl9mbG93MDoTcGFzc3dvcmRfdG9rZW4iLWZiNzEyNTAzMGNiYTk1NTU1%250ANDE0OGExM2UxN2U2Yzc1ZmY2YjUzMDE6CXVzZXJpBLWRPgYiCmZsYXNoSUM6%250AJ0FjdGlvbkNvbnRyb2xsZXI6OkZsYXNoOjpGbGFzaEhhc2h7AAY6CkB1c2Vk%250AewA6B2lkIiU0MGUyNmQzNjRmYmI4YThlODgwN2MwZWYzYzNlOGJiYjoMY3Ny%250AZl9pZCIlZTUzZjY0OGIxMWZiOTA0OWQzM2FlOGI4NjYzZDA5NTI6D2NyZWF0%250AZWRfYXRsKwhe%252FkpTKwE%253D--3b624de9adb8de40ff8a3f0a5780f2b18b6abd44; domain=.twitter.com; path=/
Status: 401 Unauthorized
X-Runtime: 0.00264

{"request":"/1/statuses/update.json","error":"Could not authenticate you."}

有人有想法吗?我被困在那里,这真的很令人沮丧.

Does anyone has an idea? i'm stuck there, and it's really frustrating.

推荐答案

好吧,如果你不想使用 Net::TwitterNet::Twitter::Lite,你至少应该看看代码,看看他们在做什么.

Well, if you don't want to use Net::Twitter or Net::Twitter::Lite, you should probably at least have a look at the code and see what they are doing.

根据您收到的错误,您似乎没有正确执行 OAuth 握手.也许它就像缺少字段一样简单,但我怀疑您的简单方法中还缺少一些东西(我对 OAuth 的细节一无所知 - 抱歉).您也可以直接访问 Twitter::Lite 使用的 OAuth 模块 Net::OAuth::Simple 看看他们是如何处理的.

Based on the error you're getting, it looks like you aren't doing the OAuth handshake properly. Maybe it's as simple as a missing field, but I suspect there is something more missing from your simple approach (I don't know anything about OAuth specifics - sorry). You could also go directly to the OAuth module that Twitter::Lite is using Net::OAuth::Simple to see how they handle it.

这篇关于如何使用 Perl 和 LWP::UserAgent 更新我的 Twitter 状态?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆