WorkToolSmith

DelphiのIndy TIdHTTPで処理が返ってこない

太田アベル

・ 更新 ・ 2分で読めます

当サイトの記事には広告リンクが含まれる場合があります。

DelphiのIndy TIdHTTPでGETなどを行っても、処理が返ってこない時があります。

正確にはOnConnectまでは発生するがまったくそこから動かない状態。その場合、GETメソッドのURLをURLEncodeしていない可能性があります。

URLエンコード

URLエンコードせずに送信すると相手のサーバーが応答できず、結果Indyが固まります。エラーを返すサーバーもあると思いますが、Web API系のやりとりではしばらく返ってこないときが多いようです。(Yahoo APIなど)

ちなみにURLエンコードは、Delphi標準のHTTPAppとIndyのIdURIの2つの手段がありますが、私はIndyのほうをオススメします。

なぜかというと、HTTPAppのHTMLEncodeは「+」などの記号をエンコードしないからです。

HTTPApp.HTMLEncode

「aaa+あいう」 -> 「aaa

%82%a0%82%a2%82%a4」(不正となる場合がある)

IdURI.URLEncode

「aaa+あいう」 -> 「aaa%20 %82%a0%82%a2%82%a4」(正しい)

HTTPApp.HTMLEncodeのほうは正常なURLではありません。

IdURIの使い方

IdURIユニットの使い方はカンタンです。

  • UsesにIdURIを追加
  • 処理中にTIdURI.URLEncode(変換元文字列)

URLEncodeはスタティック関数ですのでTIdURIのインスタンス生成は不要です。

使用例)

uses

  IdURI;(追加)

・・・

begin

query := TIdURI.URLEncode(s);

end;
太田アベル

太田アベル

パソコンを7歳からいじり始めて40年。とにかくパソコンが好きです。気になった商品をほぼ自腹で買いまくってレビュー中!良かった点、悪かった点をズバズバ書きます。

𝕏 でフォロー プロフィールを見る

こちらもおすすめ