Hatena::Grouperlang

檜山正幸のErlang未確認情報 RSSフィード

 | 

2009-01-05 (月)

headersレコード、otherフィールド、http_headerレコード

| 17:59

#arg{}にheadersというフィールドがあり、その型は#headers{}、めぼしいHTTPヘッダはフィールドとして最初から定義されているが、その他のヘッダはotherフィールドにリストとしてまとめて入る。そのotherリストの要素がいまいちわからない。

yaws_soap_lib.erl に次のようなことが書いてあった。

%% record http_header is not defined?? 
findHeader(Label, Headers) ->
    findHeader0(yaws:to_lower(Label), Headers).

findHeader0(_Label, []) ->
  undefined;
findHeader0(Label, [{_,_,Hdr,_,Val}|T]) ->
    case {Label, yaws:to_lower(Hdr)} of
	{X,X} -> Val;
	_     -> findHeader0(Label, T)
    end;
findHeader0(_Label, undefined) ->
  undefined.

注目すべきは、関数じゃなくて %% record http_header is not defined?? というコメント。僕も、http_header というレコードを探したがどうも見つからない。推測するに、

#http_header{
 num = integer(),
 name = atom(), 
 unused = undefined,
 value = string()
}

かなり重要なヘッダがotherに入ってしまっている。nameとvalueだけ取り出してみると、次のようなヘッダがotherに入る。

  1. {'Accept-Charset', "Shift_JIS,utf-8;q=0.7,*;q=0.7"}
  2. {'Accept-Encoding', "gzip,deflate"}
  3. {'Accept-Language', "ja,en-us;q=0.7,en;q=0.3"}

yaws_apiには、上のfindHeaderのような関数が見あたらない。ユーティリティを自分で書くしかないだろう(findHeaderは借用できるが)。

 |