【第8回】ポジティブな3流
2020年12月01日(火)

【第8回】ポジティブな3流

久しぶりにハマった。

ライブカメラの静止画像を取得するというシステムが
ある日を境に上手く動作しなくなる。

前任のエンジニアが抜け、急遽システムを引き継いだため
プログラムは僕が組んだものではない。
少なくとも現状把握だけでもそこそこの時間がかかる。

そもそも、プログラムの書き方には人それぞれ「クセ」のようなものがあるから
前任者の意図を汲み取ることは簡単ではない。

プログラム改修そのものよりも
不具合の原因を特定することの方が骨が折れるのだ。
逆の言い方をすれば、原因さえ分かれば修正は簡単ということ。

ただ、今回は原因特定に時間がかかった。

まず最初の関門は、取得したいサムネイル画像が認証が必要なページ内にあるということ。
これは、http://user:pass@xxx.xxxのようにログイン情報を追加してアクセスしてやればいい。

401 Unauthorized

なぜだろう。
ID/PASSが間違っているのだろうか?
ブラウザで直接確認してみる。
問題なくログインできる。

そうか!PHPはfile_get_contentsを推奨していないからかな。
cURLを使って再チャレンジしてみよう。

結果は、同じく

401 Unauthorized

ここまでの現象を一旦頭の中で整理してみた。

PHPコードにエラーはない
認証のキーは間違っていない
サムネイル画像のURLは存在する

百戦錬磨のエンジニアであれば
ここから一気に絞り込んで、あっという間に答えに辿り着くのでしょうが、
所詮僕は三流のエンジニア。
ここから、ああじゃこうじゃと迷走が始まります。

なんと原因は、カメラ側にありました。
カメラサーバーが認証方式を変更していたのです。
セキュリティ強化のための自動アップデートに誰も気付いていないというのが原因。

具体的には、Basic認証方式からDigest認証方式へ変わっていました。

Basic認証は平文のパスワードをbase64エンコードして送るだけなので脆弱です。
しかも、一度ログインすれば2回目は認証スルーしちゃいます。

一方Digest認証の方はというと、
md5でハッシュ化されたパスワードを送るのでセキュリティは強固になります。

今回は、カメラの設定をBASIC認証に戻し、
httpからhttpsでのアクセスにすることでセキュリティ面もカバー。

以前のように不具合無く動画のサムネイル画像が取得できるように復活しました。

一見無駄な時間のように思えてしまう原因特定作業の長期化。
しかし、終わってみると、ものすごく勉強になり、地力が着いていることに気付かされます。
自分で考え、自分で見つけ出すことが重要です。
人に聞く、コピペで済ます、は本気で上達したいなら選ばない方がいいでしょう。

辛い、苦しい、眠れない三重苦。
この修業期間すら楽しめるようになれば一流の仲間入り。
そう勝手に思い込んでいる能天気でおめでたい3流エンジニアとは僕のことです。

ぴぃちゃんち