2005-06-09 (Thu)

* Indy 9.0.0.10 で POST データに余分な改行が付く

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Delphi]

Delphi 5 + Indy 9.0.0.10 で発生するバグを一つ発見。

Content-Type を multipart/form-data にして POST すると、最後のパートに余計な CRLF が付いてしまう。送信するときに付いているのか、Request オブジェクトを作成しているときに付いているのかなどは、ソースがないので不明。

最後にダミーのデータを付けることで対処。

request.AddFile(SearchRec.Name, target_file_path, 'application/octet-stream');

// 最後のパートに余計な CRLF が付くという Indy 9.0.0.10 のバグ回避
request.AddFormField('dummy', 'str');

追記。当メモは Indy が No data to read エラーを出すという件の回避方法でもあるはず。

2005-05-17 (Tue)

* Delphi 5 のキーボードショートカット インデント編

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Delphi]

Delphi5 ヘルプ
〔Ctrl〕+〔Shift〕+〔I〕    ブロックをインデントする
〔Ctrl〕+〔Shift〕+〔U〕    ブロックをアウトデントする

インデント/アウトデントしたい範囲を選択してコマンドを入力する。
VS.NET はペーストしたコードでもなんでも勝手にインデントを揃えてくれるんだけど、Delphi5 はやってくれないので自分で揃える。

コメントアウトとコメントアウト解除のキーボードショートカットも探したけど、見つからなかった。複数行を一気にコメントにしたいときに使いたいんだけどな。Delphi だと {} で囲んだ部分が複数行対応のコメントになるから、それを使えばいいか。

2005-05-14 (Sat)

* Delphi の Indy コンポーネントで Cookie を扱う

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Delphi] [http]

Delphi5 + Indy 9.0.0.10 で HTTP Cookie を扱う方法。

HTTP := TIdHTTP.Create(nil);
HTTP.Request.CustomHeaders.Add('Cookie: ' + cookie_string); // Set Cookie
cookie_string := HTTP.Response.RawHeaders.Values['Cookie']; // Get Cookie

2003-12-16 の「indy で HTTP の拡張ヘッダを扱う」とやってることは同じ。HTTP ヘッダを直読み・直書きしてるだけ。CookieManager クラスを使う方法もあるが、上記の方法が一番シンプルで簡単。ただし、上記方法は Cookie の有効期限やドメイン、path は一切無視しているので注意。それらを扱いたければ CookieManager を使う。

Google を検索したら ExtraHeaders を使う方法が見つかったが、Indy のバージョンが異なるのかプロパティが見つからなかった。

Indy Tips
http://www.monazilla.org/document/indytips.html
クッキーを添えて送信する
  FIdHttp.Request.ExtraHeaders.Add('Cookie:NAME=HOGEHOGE'); // こんなかんじ
  FIdHttp.Post(Url, Source, Res);

- Cookie の仕様

HTTP Cookies
http://66.102.7.104/search?q=cache:aXMyyoN584QJ:www.studying ...
なぜか 403 Forbidden になってしまうので Google キャッシュ。

2005-05-07 (Sat)

* Delphi 5 標準の CSV 処理 TStrings.CommaText

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Delphi]

Delphi5 で CSV を扱うならカンマ区切りのデータが扱いやすい。TStrings.CommaText を使えるからだ。ちなみに、TStringList.DelimitedText は Delphi5 にはないので、タブ区切りなどにしてしまうとかえって大変。

Delphi5 ヘルプ TStrings.CommaText
TStrings.CommaText

CommaText プロパティは,システムデータ形式(SDF)でリストに入っている TStrings オブジェクト内の文字列リストです。

property CommaText: string;

説明

CommaText プロパティは TStrings オブジェクト内のすべての文字列を単一のカンマ区切り文字列として取得および設定できます。
CommaText を取得するときに文字列リストの文字列にスペース,カンマ,または引用符がある場合には,文字列は二重引用符で囲まれ,二重引用符がある場合には二重引用符が連続して付けられます。たとえば,文字列リストに次の文字列があるとします。

Stri,ng 1

Stri"ng 2
String 3

String4

CommaText は次を返します。

"Stri,ng 1","Stri""ng 2","String 3",String4

CommaText を割り当てる場合,値は SDF 書式付きテキストとして解析されます。SDF 形式の場合,文字列はスペースまたはカンマで区切られ,任意で二重引用符で囲まれます。文字列に二重引用符がある場合,元の文字列と文字列を囲む引用符を区別するために続けて引用符を付けます。二重引用符で囲まれていないスペースおよびカンマは区切り記号です。2 つ並んだカンマは空の文字列を意味しますが,区切り記号の前後にあるスペースは無視されます。たとえば,CommaText を次のように設定するとします。

"Stri,ng 1", "Stri""ng 2", String 3,String4

リストには次の文字列が含まれます。

Stri,ng 1

Stri"ng 2
String
3

String4

2003-12-16 (Tue)

* Delphi の Indy で HTTP の拡張ヘッダを扱う

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Delphi]

- 拡張レスポンスヘッダの取得

拡張レスポンスヘッダは RawHeaders オブジェクトから取得する。
str := IdHTTP1.Response.RawHeaders.Values['X-SpecialResponse'];

- 拡張リクエストヘッダの設定

拡張リクエストヘッダは CustomHeaders.Add() を利用して設定する。
IdHTTP1.Request.CustomHeaders.Add('X-SpecialRequest: F-ZERO GX');

- CustomHeaders からは取得できない

レスポンスヘッダの取得は CustomHeaders オブジェクトでもできるかなと思ってアクセスしたが、Indy ver 9.0.0.10 では取得できなかった。IdHTTP1.Response.CustomHeaders.Count も 0 だった。マニュアルを読み試行錯誤した結果、RawHeaders でないとダメと言うことがわかった。RawHeaders だけでなく CustomHeaders でも取得できても良いと思うんだけどなあ。

以下の方法では取得できない。
// NG
str := IdHTTP1.Response.CustomHeaders.Values['X-SpecialResponse'];


すべての記事の見出し (全1029件)
全カテゴリの一覧と記事の数
カテゴリごとに記事をまとめ読みできます。記事の表題だけを見たい場合は、すべての記事の見出し (カテゴリ別表示) へ。

直近30日分の記事
2007-04-23 (Mon)
2007-03-07 (Wed)
2007-02-27 (Tue)
2007-01-17 (Wed)
2007-01-15 (Mon)
2007-01-14 (Sun)
2007-01-08 (Mon)
2006-12-01 (Fri)
2006-11-22 (Wed)
2006-11-20 (Mon)
2006-11-19 (Sun)
2006-09-30 (Sat)
2006-08-29 (Tue)
2006-08-04 (Fri)
2006-07-27 (Thu)
2006-07-23 (Sun)
2006-07-17 (Mon)
2006-07-10 (Mon)
2006-07-06 (Thu)
2006-07-03 (Mon)
2006-06-29 (Thu)
2006-06-28 (Wed)
2006-06-27 (Tue)
2006-06-25 (Sun)
2006-06-19 (Mon)
2006-06-18 (Sun)
2006-06-15 (Thu)
2006-06-11 (Sun)
2006-06-01 (Thu)
2006-05-30 (Tue)
プロファイル
斎藤 宏明。エンジニアです。宇都宮市に住んでいます。
リンク
RSS
スポンサードリンク
Powered by
さくらインターネット

© 斎藤 宏明 Saito Hiroaki Gmail Address
Landscape - エンジニアのメモ http://sonic64.com/
Landscape はランドスケープと読みます。
ひらがなだと らんどすけーぷ です。