名もなき未知

エンジニアリングとか、日常とかそういうのをまとめる場所。

HTTP::Tinyの通信がうまくいかなかったのでメモ

perl入学式の資料を一人で黙々と読んでいるのだが、うまくいかなかったのでメモ。

具体的にはこの辺の話。

https://github.com/perl-entrance-org/workshop-basic-online/blob/master/3rd/slide.md#web-api-%E3%82%92%E4%BD%BF%E3%81%86get-9

起きていたこと

デコードに失敗していた。具体的に調べていくとhttps通信に問題がありそうなことがわかる。

調べていくと、下記の記事を見つけた。

squareperl.com

これに従って、 ssl が有効かどうかを調べる。

my ($can_ssl, $why) = HTTP::Tiny::can_ssl();
print "$can_ssl" . "\n";
print "$why" . "\n";

するとこのような結果になった。

0
IO::Socket::SSL 1.42 must be installed for https support
Net::SSLeay 1.49 must be installed for https support

つまり SSL 通信が有効ではない。

解決方針

perldocの元をたどって英語版の記事を読む。

metacpan.org

Direct https connections are supported only if IO::Socket::SSL 1.56 or greater and Net::SSLeay 1.49 or greater are installed. An error will occur if new enough versions of these modules are not installed or if the SSL encryption fails. You can also use HTTP::Tiny::can_ssl() utility function that returns boolean to see if the required modules are installed.

とあるので、ライブラリをアップデートすればよさそうだ。

解決する

squareperl.com

この記事を再度参考に、 cpanm IO::Socket::SSL したところライブラリがアップデートされ、正しく動くようになった。

起きていたことのコード片の実行結果も下記のようになり、有効になったことがわかる。

1

まとめ

情報にありつくのが意外と難しかったです。 でもデフォルトで https クライアントや json が扱いやすい形なのは perl のいいところかもしれませんね。

それにしても入学式のドキュメントはよくできていると感じます。今まで触ってこなかった言語ですが、シジルの仕組みは面白いですね。 リファレンスは難しかったり、サブルーチンは引数の取り出しがそんな方法で…! みたいなところ思うところありますが、ベターshellというか活用できそうな亜場所はまだまだありそうな言語だなーと感じていて、話題に上がることは少なくなったけど魅力もある言語だなと思ってます。

早いところ入学式を終わらせたい(一応、書いたものを非公開リポジトリに上げてコード管理だけはしてる)。