Perlから「はてな」のブックマーク数を取得時に「slv3 alert handshake failure」が出て取得出来ないので他のサーバーに投げて代わりにwgetで取得されるメチャクチャな方法でごまかした個人的メモ

カテゴリー:Perl・Javascript・python、サーバー管理メモ(記事数:62)

 
 
 

2020.03.20

Perlから「はてな」のブックマーク数を取得時に「slv3 alert handshake failure」が出て取得出来ないので他のサーバーに投げて代わりにwgetで取得されるメチャクチャな方法でごまかした個人的メモ

PerlからのHTTPSアクセスまわりがもう末期的な感じで、黄昏の言語なのかなと思っちゃう今日この頃。
しかし20年を超えるWeb運営の中で組んだ巨大で複雑怪奇なシステム群を別の言語で書き直すのも面倒だしねぇ・・・・、ここ数年でも何度かアクセス出来ないサーバーが出てきてPerlとか色々とアップデートしたらどうにかアクセス可能になったんだけど、直近だと「はてな」のAPIサーバーとかOSもPerlまわりも自動で出来るかぎり最新にしてもアクセス出来ないorz。

(1)通常のアクセス方法
$URLにアクセスするアドレスを入れて


---------------------------------
use LWP::UserAgent;
my $ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0 });
$ua->agent('Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20100101 Firefox/15.0.1');
my $req = HTTP::Request->new("GET",$URL);
$req->referer($URL);
---------------------------------

これで$ua->request($req)->as_stringでアクセス先の内容が参照出来る。

(2)(1)の方法で取得すると「slv3 alert handshake failure」ってなる場合、Perlを諦めてwgetに投げるw

---------------------------------
if ($ua->request($req)->as_string =~ /sslv3 alert handshake/){
my $targetUrl='"'.$URL.'"';
my $fname='getfiletemp.txt';
`/usr/bin/wget --no-check-certificate -q -O $fname $targetUrl`;
}
---------------------------------

でファイル名$fnameにアクセスしたいURLの内容が入るのでそれを読み込む。

(3)wgetが利用出来ないレンタルサーバーの場合
(2)の内容をwget出来る別サーバーに投げて取得ww

で結局うちのサイトは(3)で動いてます。最終的に使っているコード
WebAccess('http://usepokcet.com')とかで取得出来る。

---------------------------------
sub WebAccess{
my $ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0 });
$ua->agent('Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20100101 Firefox/15.0.1');
my $req = HTTP::Request->new("GET",$_[0]);
$req->referer($_[0]);
if ($ua->request($req)->as_string =~ /sslv3 alert handshake/){
return(&WebAccess('http://xxxxx.xxx/p.cgi?url='.$_[0]));
}else{return($ua->request($req)->as_string);}
}
---------------------------------

別サーバーのp.cgiの内容

---------------------------------
#! /usr/bin/perl

use CGI;
my $q = new CGI;
my %FORM=();
my @FORMname= $q->param();
foreach my $dammy (@FORMname){$FORM{$dammy}=$q->param($dammy);}

print "Content-Type:text/html\n\n";
$targetUrl='"'.$FORM{'url'}.'"';
$fname='getfiletemp.txt';
`/usr/bin/wget --no-check-certificate -q -O $fname $targetUrl`;
my @Data=&GetAllData($fname);
print @Data;
exit;

sub GetAllData{
my $FLFile=$_[0];
my @FL;
open (FL,"$FLFile");
flock(FL,1);
@FL=;
close FL;
return (@FL);
}
---------------------------------


乗り換えるとしたら何が良いんだろう?なるべく緩い言語が良いんだけどねぇ。
Python?、JavaScript +node.js?

Category:Perl・Javascript・python、サーバー管理メモ

 Keyword:Java/31 orz/179 Access/13



コメント

いいっすね!=1
001 [03/21 01:23]匿名さん@Dion:昔から動いているものでHTTPSで接続エラーってことはTLS1.0/1.1の無効化が原因っぽい気がするので、まずはTLS1.2以降で接続できるか確認、出来ないようなら出来るようにモジュールやPerlの動いているサーバの設定の見直しとかしてみてはどうでしょうか?
002 [03/21 01:27]匿名さん@Dion:個人的にはC#(.NET Core)かTypeScript(JavaScript)+node.jsですが、お仕事で分析とかに使うならPython、あんまり労力掛けたくなければRubyとかでもいいんじゃないでしょうか。 (1)
003 [03/24 10:59]MotoZ2User:(1)で失敗するのは、LWPが使っているOpenSSLライブラリのバージョンが古いためと思います。流血沙汰+ワンコ(Heartbleed+poodle)のダブルコンボでメタメタなので。https://stackoverflow.com/questions/4760....
004 [03/24 11:03]MotoZ2User:モジュールの入れ方も進歩しているから、自動的に更新できる方法に変えた方がエエよ。昔は tarball を make したり、Perl::CPAN を叩いたり、cpanminus 入れたりしていたと思うけど、libwww-perl は apt-get で入る。
005 [03/24 11:14]ふぇちゅいん(管理人) TW★74:さくらVPSはWebminから全ライブラリアップデートしたら接続出来るようになったのでOKだったんだけど、レンタルサーバーってライブラリのアップデートしてくれなんだよ、まあ互換性の問題とか出てきたら面倒なんだろうけど。
006 [03/24 13:32]MotoZ2User:あー、レンサバですか。そらキツいわ…… 自分もディレクトリ変更からのmakeで無理やりぶち込んだかな。メンテナンスを考えると気が狂いそうだ。

名前 ↑B

コメント(※改行は省略されます)

※3回以上の連続書き込み不可
この記事のアクセス数: 本日の記事一覧に戻る


→カテゴリー:Perl・Javascript・python、サーバー管理メモ(記事数:62)
アクセス数の多い記事(過去1ヶ月)

すべて見る

Java
Access
orz