> 色々ゴチャゴチャしてますが、メールで送りました。
いただきました。
ゴチャゴチャしているのもそうですが、送られてきたスクリプト、いろいろと悪い
意味で予想が外れていました。
#11773
> そして、そのリンクだけを読み込もうとして、つまり、他のサイトを読まない、素の
> シンプルなテスト用のスクリプトを作って、それで
> > これについてですが、#11754で私が尋ねたように、軟式さんのサイトだけを読み込む
> > スクリプトでも同じ状況になる、ということですよね。"
> この状況が起こるようであれば、私にもそのテスト用スクリプトを送ってほしい、
と書いたので、当然、該当URLを読み込む部分だけのスクリプトで試験していて、その
スクリプトを送ってくると思っていたのですよ。が、いろいろな出力部分が残って
いて、それがわりと迷彩状態。もうね、この段階で私の期待はずれ。
テストはできるだけシンプルなコードで、ということは心がけてほしい。
で、まずは手始めに、送っていただいたコードの中の取得するURLを指定している
だけを、うまく取得できるはずのbing経由に書き換えてlacoocanの私のスペースに
アップロードしてアクセスするも、あえなくlacoocanからの
> Internal Server Error
> 実行エラー
> CGIの実行時にエラーが発生しました。
の表示。う〜ん、一体何が悪いのかわからん。
もしかしたら、いらなさそうなところを全部削ればきちんと動くのかもしれません
が、そんなこともやってられない。結局、自前で試験用スクリプトを作ってしまい
ました。以下のような感じ。
#!/usr/local/bin/perl
use LWP::UserAgent;
my $ua = 'Mozilla/5.0 (compatible; MSIE 9.0; Trident/5.0)';
my $timeout = '230';
my $lwp = LWP::UserAgent->new( agent => $ua, timeout => $timeout );
my @new = ();
my @list = ();
my $outline = '';
print "Content-type: text/html\n\n";
print "<html><head><title>dummy</title></head><body>\n";
## コンテンツの取得
my $url1 = 'https://www.nanshiki.co.jp/nanshiki.xml';
# my $url1 = 'http://27-138-85-108.rev.home.ne.jp';
my $res1 = $lwp->get( $url1 );
## ダウンロード成功時
if ( $res1->is_success ) {
print "success";
## ダウンロード失敗時
} else {
print "error\n";
}
print "</body></html>\n";
__END__
これだけのコードで、うまくデータが取得できないことは確認。
ということで、ここから調査開始。
まず軟式さんのサイトの素性調査。すると、bit-driveというソニー系のサービスを
利用していることが判明。が、このサービスが特殊、というのは引っかかってこない。
次に、LWPでうまくアクセスできない、という状況を調査。
すると、20年近く前のQ&Aで、Wikipediaにうまくアクセスできないという状況が
あったらしい。このときは、LWPのデフォルトのユーザーエージェントがlibwww-perl
となっていて、そのUAでのアクセスをWikipediaが蹴っ飛ばしているから、とのこと。
でも、今回はスクリプトでUAを変更しているから関係ないよなぁ、と思いつつ、
FirefoxのアドオンでUAを偽装してlibwww-perlを偽ってみたり、UAなしにして
みたりして軟式さんのところにアクセスすると、普通にアクセスできるので、おそらく
UAは関係なさそう。
ただ、これに着想を得て。
LWPがアクセスするときの、HTTPのプロトコルレベルで何か余計なものがくっついて
いる可能性があるのではないかと思い、自宅で80番ポートにダミーのサーバを立てて
プロトコルレベルでのやり取りを観察しようと思いました。使ったソフトは「鯖男」
というものです。ベクターにあります。
結果、「インデックスがリストの範囲を超えている」みたいなエラーメッセージを
「鯖男」が吐いてきて。つまり、「鯖男」が想定していないようなデータをニフティ
のLWPは送りつけている模様。
ここまでの調査でわかったことはこれだけ。
今後の調査の方向。
LWP::UserAgent ではなく LWP::Simple にある getprint というのを使うと、少し
詳しいステータスが取れるらしい。これでエラーコードか何かがわかれば、さらに
先に進む手がかりが得られるかも。
もちろん、LWP::UserAgent ですら、私は全てを把握できているわけではないので、
その中で何か有用なものがあれば使ってみたい。
途中経過でした。