ishiducaの日記 このページをアンテナに追加 RSSフィード

2011-06-27

[][][]AnyEvent::HTTPでFrinedFeedにポストしてコケる(未解決->解決 6/28 0:33) 20:53 AnyEvent::HTTPでFrinedFeedにポストしてコケる(未解決->解決 6/28 0:33) - ishiducaの日記 を含むブックマーク はてなブックマーク - AnyEvent::HTTPでFrinedFeedにポストしてコケる(未解決->解決 6/28 0:33) - ishiducaの日記 AnyEvent::HTTPでFrinedFeedにポストしてコケる(未解決->解決 6/28 0:33) - ishiducaの日記 のブックマークコメント

(追記)ブックマークid:mattn さんから頂いたコメント

_authの最下行の手前に chomp $auth; 入れるときっと動くナリ

をやってみたら、ポスト出来ました。 id:mattn さんありがとうございます!

--

AnyEvent::HTTP(と Tatsumaki::HTTPClient)でFriendFeedBasic認証付きのポストをしようとするとステータスコード 404 が返ってきて、bodyパラメータが必要ですって言われる!

FriendFeedAPIのドキュメントは「FriendFeed API Documentation」にある。

use strict;
use AnyEvent;
use AnyEvent::HTTP;
use MIME::Base64;
use Data::Dumper;

my $api = 'http://friendfeed-api.com/v2/entry';

my $cv = AnyEvent->condvar;
http_request('POST' => $api,
    headers => {
	    'Authorization' => _auth('my username', 'my remotekey') 
    },
    body    => "body=test",
    sub {
        warn Dumper \@_;
        $cv->send;
    },
);

$cv->recv;
exit 0;

sub _auth {
    my($username, $remote_key) = @_;
    my $auth = MIME::Base64::encode(join(":", $username, $remote_key));
    chomp $auth; # add
    "Basic $auth";
}

結果: 401が返ってきてないから、Basic認証は通ってるけど、errorCode で "body-required" って言ってるので、リクエストボディに問題があるっぽい。ちなみにFriendfeedAPIではリクエストボディに必ず body パラメータが必要で、それがリクエストボディに記述がないってエラーコードなんだけど、、、リクエストボディの送信ができてないのか、それともリクエストボディの記述が間違いなのか?

$VAR1 = [
          '{"errorCode":"body-required"}',
          {
            'URL' => 'http://friendfeed-api.com/v2/entry',
            'connection' => 'close',
            'set-cookie' => 'HASFF=1; Path=/,AT=3295780562084656563_1309173742; Path=/',
            'Status' => '404',
            'HTTPVersion' => '1.1',
            'date' => 'Mon, 27 Jun 2011 11:22:22 GMT',
            'content-length' => '29',
            'Reason' => 'Not Found',
            'content-type' => 'text/javascript; charset=UTF-8',
            'server' => 'FriendFeedServer/0.1'
          }
        ];

AnyEvent::HTTPのラッパーの Tatsumaki::HTTPClient を使ってみる

my $client = Tatsumaki::HTTPClient->new;

my $cv = AnyEvent->condvar;
$client->post(
    $api,
    [ body => 'TEST' ],
    Authorization => _auth('my username', 'my remotekey'), 
    sub {
        warn Dumper shift;
        $cv->send;
    }
);

$cv->recv;
exit 0;

結果: 同じ結果

$VAR1 = bless( {
      '_content' => '{"errorCode":"body-required"}',
      '_rc' => '404',
      '_headers' => bless( {
           'connection' => 'close',
           'set-cookie' => 'HASFF=1; Path=/,AT=2762172806905182125_1309174542; Path=/',
           'date' => 'Mon, 27 Jun 2011 11:35:42 GMT',
           'status' => '404',
           'reason' => 'Not Found',
           'httpversion' => '1.1',
           'content-length' => '29',
           'content-type' => 'text/javascript; charset=UTF-8',
           'url' => bless( do{\(my $o = 'http://friendfeed-api.com/v2/entry')}, 'URI::http' ),
           'server' => 'FriendFeedServer/0.1'
         }, 'HTTP::Headers' ),
      '_msg' => 'Not Found'
    }, 'HTTP::Response' );

ちなみに

  • LWP::UserAgent を使うとポストできる
  • 他のコンテンツへのポストは成功している

yamada-22yamada-22 2011/06/28 00:17 リクエストのContent-Typeがapplication/x-www-form-urlencodedになっていない

yamada-22yamada-22 2011/06/28 00:22 ああ!MIME::Base64::encodeが改行を付けてくれるんだw
MIME::Base64::encode('user:password', '')

DrewDrew 2012/06/07 21:10 Kick the tires and light the fires, pobrlem officially solved!

agxmfhaagxmfha 2012/06/09 21:02 Io5KaW <a href="http://fyaycxcrdhjp.com/">fyaycxcrdhjp</a>

cispuamcispuam 2012/06/11 04:21 8CoSjX , [url=http://bjktioecdzru.com/]bjktioecdzru[/url], [link=http://oflrgnwvwvst.com/]oflrgnwvwvst[/link], http://tjepxvynitpm.com/

bzjdqwzbflbzjdqwzbfl 2012/06/13 10:29 UmydyD , [url=http://wyoyiunnomhj.com/]wyoyiunnomhj[/url], [link=http://vgnlnayohkwz.com/]vgnlnayohkwz[/link], http://iqvgphlofwhj.com/

ゲスト



トラックバック - http://perl.g.hatena.ne.jp/ishiduca/20110627