2

perl 5.16.2、OAuth::Lite(1.31) を使用して Web サービスを作成しています。サーバーは CentOS リリース 6.3 (最終版)、2.6.32-279.14.1.el6.x86_64 です。

問題は、Twitter oauth のトークンを要求し、OAuth::Lite get_request_tokenサーバーの実行を 30 秒間ブロックし、適切な応答を返したり、ブラウザの要求をタイムアウトしたりする場合です。

問題を再現するための最小限のコードは以下のとおりです。

use OAuth::Lite::Consumer;                                                            

my $consumer = OAuth::Lite::Consumer->new(                                      
  request_token_path => 'https://api.twitter.com/oauth/request_token',          
  consumer_key       => '[CONSUMER KEY]',                               
  consumer_secret    => '[CONSUMER SECRET]',            
  callback_url       => '[CALLBACK]',                    
);                                                                              

my $rtoken = $consumer->get_request_token();

30秒後に戻ります。

コードを読んで、my_readlineNet::HTTP::Methods の 259 ~ 260 行目でそのメソッドを見つけました。Net::HTTP 6.05

die "read timeout" unless $self->can_read;
my $n = $self->sysread($_, 1024, length);

リクエストをブロックします。そして、my_readline読み込もうとしているヘッダーは

HTTP/1.1 200 OK
Date: Fri, 16 Nov 2012 16:16:39 GMT
Status: 200 OK
X-MID: 266cca0268c8eb68e76eedda256c77829ea9b22e
X-Transaction: 784ff126dfead993
Tag: "382e5356bb65e976f6b117bacdfa05e4"
Cache-Control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0
X-Runtime: 0.02892
Pragma: no-cache
Expires: Tue, 31 Mar 1981 05:00:00 GMT
X-Frame-Options: SAMEORIGIN
Content-Type: text/html; charset=utf-8
Last-Modified: Fri, 16 Nov 2012 16:16:39 GMT
Set-Cookie: k=10.36.55.109.1353082599368934; path=/; expires=Fri, 23-Nov-12 16:16:39 GMT; domain=.twitter.com
Set-Cookie: guest_id=v1%3A135308259937793094; domain=.twitter.com; path=/; expires=Mon, 17-Nov-2014 04:16:39 GMT
Set-Cookie: _twitter_sess=BAh7CCIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNo%250ASGFzaHsABjoKQHVzZWR7ADoHaWQiJTJlZGJiN2MyOTMyNmM0OGY0MjJmZmY0%250AMTU3YzllYTI0Og9jcmVhdGVkX2F0bCsI0vcBCjsB--21ab24a6dd6596b1dcc78651c0b6a4836b320621; domain=.twitter.com; path=/; HttpOnly
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 150
Server: tfe

このヘッダーは 1024 文字を超えています。1024 を 2048 に変更したところ、問題なく動作するようになりました... この問題の原因を突き止めたいと思います。

どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

2

何年も前に、LWP::Protocol::https (OAuth::Lite でも使用されます)、特に CentOS で悪い経験をしました。簡単に言うと、そのプラットフォームで Net::SSLeay をコンパイルしようとするあまりのフラストレーションから、LWP::UserAgent を WWW::Curl に置き換えることになりました。これは問題なくコンパイルされます。そして、その単純なアプリケーションでうまく機能しました。ただし、OAuth::Lite は LWP と密接に結合されており、すべてを再実装しても意味がありません。また、LWP ベースのコードでlibcurlを使用する別の方法があります。 私たちに属しています.html

于 2012-11-16T17:40:37.643 に答える