> LWPがアクセスするときの、HTTPのプロトコルレベルで何か余計なものがくっついて
> いる可能性があるのではないかと思い、自宅で80番ポートにダミーのサーバを立てて
> プロトコルレベルでのやり取りを観察しようと思いました。
他の、簡単に立てられて簡単にプロトコルログが取れるサーバソフトはないかと
探したところ、やっぱりベクターにありました。似たような名前のソフトがいくつ
もありますが、以下のものです。
https://www.vector.co.jp/soft/winnt/net/se381431.html
普通、サーバログというのはプロトコルレベルではありません。
ですが、このソフトの場合は逆にシンプルすぎて、プロトコルレベルでしか記録
してくれないのです。
早速導入してニフティからアクセスさせた結果。
なんかえらく欠落が多い。
ローカルのブラウザからアクセスした時は、きちんと一通りのログが取れていると
いうのに。速度の問題なのかな。ニフティ側が速すぎるとか。
とりあえず、この方向は一旦保留。
> 今後の調査の方向。
> もちろん、LWP::UserAgent ですら、私は全てを把握できているわけではないので、
> その中で何か有用なものがあれば使ってみたい。
googleでいろいろと調べてみても埒が明かなくなりつつあったので、MS copilotに
質問を投げてみました。すると想定外に、役に立つ答えが返ってきました。
> LWPライブラリを使用して他のWEBサイトにアクセスできない原因を追究するため
> には、以下の方法を試してみると良いでしょう:
>
> エラーメッセージの確認:
> LWPライブラリが返すエラーメッセージを確認し、具体的なエラー内容を把握し
> ます。これにより、問題の原因を特定しやすくなります。
> アクセス制限の確認:
> アクセスしようとしているWEBサイトが特定のIPアドレスやユーザーエージェン
> トをプロックしている可能性があります。サイトの管理者に問い合わせるか、
> 異なるIPアドレスやユーザーエージェントを使用してアクセスを試みてください。
> SSL/TLS設定の確認:
> HTTPSサイトにアクセスする場合、SSL/TLS証明書の問題が原因でアクセスできな
> いことがあります。LWP::UserAgentのSSL設定を確認し、必要に応じて証明書の
> 検証を無効にするか、正しい証明書を使用するように設定します。
> プロキシ設定の確認:
> プロキシサーバーを経由してアクセスする必要がある場合、LWP::UserAgentの
> プロキシ設定が正しく構成されているか確認します。
> タイムアウト設定の確認:
> タイムアウト設定が短すぎると、アクセスが完了する前にタイムアウトしてしま
> うことがあります。LWP::UserAgentのタイムアウト設定を適切に調整します。
> デバッグモードの使用:
> LWP::UserAgentのデバッグモードを有効にして、詳細なログを取得します。これ
> により、問題の原因をより詳細に分析できます。
>
> これらの方法を試しても問題が解決しない場合は、Niftyのサポートに問い合わせ
> てみるのも良いでしょう。問題の詳細を提供することで、より具体的なサポート
> を受けられるかもしれません。
この次の質問として、サンプルコードを要求したのですがね。
なんと、一見正しく動きそうなサンプルコードを提示してきたのですよ。
びっくり。
本当にそのまま動くかどうかはわかりませんが、とりあえず、そこに提示されていた
「デバッグモードを有効にする」「SSL証明書の検証を無効にする」コードをを先述
のスクリプトに組み込んでみたところ、なんかきちんと軟式さんのところからデータ
を取得できているみたい。
次に、「SSL証明書の検証を無効にする」コードを取り外してみたところ、なんと
データの取得に失敗するではありませんか。
もしかしてこれか?
えぇと、可能性として考えられるものは2つ。
ニフティのLWPで使っているSSL/TLSの証明書がおかしくて、軟式さんのサイトと
きちんと通信できないという可能性。
もうひとつは、軟式さんのサイトで使っている証明書がおかしい可能性。
回避策としては、あまり好ましくはありませんが、上記のとおり、SSL証明書の検証
を無効にすればよい。無効にするためのコードは
$lwp->ssl_opts(verify_hostname => 0);
というものを追加すればよい。$lwpを宣言した直後でも大丈夫のはず。
お試しください。