HTTPConnectionやURLConnectionのgetHeaderField, getHeaderFieldKeyでnullが返るとき
MIDPやってて、とある状況で、getResponseCode()するとExceptionがでて、*1Malformed Header Formと言われるそうなので、レスポンスのHTTPヘッダを見ておいたほうがいいかと思いHTTPConnectionを眺めた。
- getHeaderFieldKey
- getHeaderField
があるので、これで見れるのだが、
- 戻り値:
n
番目のヘッダフィールドのキー。フィールドの数がn
個よりも少ない場合はnull
というのにはまった。フィールドの値がnullのことはあるけど、キーがnullなのは、headerとして指示した番号がフィールドの数よりも大きくなったときだろうと思って、
HTTPConnection c; ... int i = 0; while (c.getHeaderFieldKey(i) != null) { ... i ++; }
としたら、ヘッダがでてこない。
URLConnectionのgetHeaderFieldsをつかって全部出すと、こんな感じ。
HTTP/1.x 200 OK Connection: Keep-Alive Date: Tue, 28 Feb 2006 16:13:40 GMT Content-Type: text/html Server: WEBrick/1.3.1 (Ruby/1.8.2/2004-12-25) Content-Length: 944
つまり、1行目は、キーがnullになってた。たしかに、ありだ。フィールド値自身がnullなheaderこそない状態だったようだ。なので、
HTTPConnection c; ... int i = 0; while (c.getHeaderField(i) != null) { ... i ++; }
が正解のよう。
*1:自分でググッて見つけられなかったんで、キーワードになりそうな言葉を追加した。