こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

DoJa5.1でiアプリを作っています。

DoJa5.1でiアプリを作っています。
サーバー上のテキストファイルの内容を、スクラッチパッドに保存しようとしています。

サーバ(さくらのレンタルサーバ)がcontentLengthを返していないようで、
うまく動作しません。

サーバ上のテキストファイルはサイズが一定ではありません。
contentLengthを取得する方法、または別の解決方法があったら教えてください。
よろしくお願いします。


HttpConnection http = null;
InputStream in = null;
data = null;

try{
  http = (HttpConnection)Connector.open("http://xxxxx.sakura.ne.jp/cgi-bin/xxxxx.cgi", Connector. READ);
  http.setRequestMethod(HttpConnection.GET);

  http.setRequestProperty("Content-Type","text/plain");
  http.connect();

  int contentLength = (int)http.getLength();
  in = http.openInputStream();

  // textbox.setText(Integer.toString(contentLength));
  // contentLengthの値を確認したらなにもない(空欄のまま)
  // ちなみに、5行まえの「http.setRequestProperty("Content-Type","text/plain");」
  // をコメントアウトすると、contentLengthは「-1」になりました。

  // data = new byte[contentLength];
  // contentLengthが取得できないので、ここでエラーになる
  // in.read(data);

} catch...


サーバ上のCGIです。
--------------------------------------------------------------
#!/usr/bin/perl

print "Content-type: text/plain\n\n";

print "test";
--------------------------------------------------------------

投稿日時 - 2010-07-18 17:02:34

QNo.6047082

困ってます

質問者が選んだベストアンサー

この場合、Content-Lengthを出力できるのはそのサーバ上のCGIスクリプトだけなので、そのHTMLヘッダ出力部分を

print "Content-type: text/plain\n\n";
print "Content-Length: 2000\n";
print "\n";

のように書き換えてください。もちろん、「2000」の部分は出力する内容に合わせて事前に計算する必要があります。

投稿日時 - 2010-07-18 20:06:04

お礼

ありがとうございます。
この方法で対応できました。

「Illegal Header」とエラーが出たのですが、
http.setRequestProperty("Content-Type","text/plain");
をコメントアウトしたらContent-Lengthを正しく受け取りました。

ありがとうございました。

投稿日時 - 2010-07-19 22:30:19

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

ANo.1の者です。書き間違いがありました。?nが一つ余計でした。

print "Content-type: text/plain?n";
print "Content-Length: ", $len, "?n";
print "?n";

投稿日時 - 2010-07-19 09:17:50

あなたにオススメの質問