Indy IPv6でアクセスできない (indy10)

執筆:2018.07.22
編集:2018.07.22

IPv6のアドレスに
IdHTTP1.Get
すると
Socket Error # 10061
Connection refused.
と表示される

原因
  URIでIPv6の形式でない場合は、IOHandlerの設定にかかわらず Id_IPv4 として扱われるため。

原因のコード部分
IdHTTP.pas : procedure TIdCustomHTTP.CheckAndConnect
if not Connected then try
  IPVersion := FURI.IPVersion;

この行を適切に修正することで、IPv6でアクセスできるようになります。

テストコード
(1) ipv6でサーバーを立ち上げ準備をする
  php -S localhost:8000 Unit1.pas

(2) テストコードを実行する
IdHTTP1.Get('http://localhost:8000/');

2018/07/22でのリポジトリ最新バージョンでもこのバグは健在でした。

IdHTTP1.Get('http://[localhost]:8000/');
とすると ipv6でアクセスするが実用的ではない。

最後に
Indyのhttpは昔からバグだらけなので
バグ報告したところで修正してくれるものでもないでしょうから
  • 自前でWinのapiでhttpアクセスするとか
  • HTTP クライアントが実装されているらしいのそれを使ったコードに移行するとか
他のツールを使ったほうがいいですね。

Dlephiをやめて C# や vb.net にいったほうが開発ツールのバグがなくていいですよ

キーワード:
indy indy10 IPv6 Socket Error # 10061
Socket Error # 10061 Connection refused.

» Indy IPv6でアクセスできない (indy10)'">続きを読む