プロが教えるわが家の防犯対策術!

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";
--------------------------------------------------------------

A 回答 (2件)

ANo.1の者です。

書き間違いがありました。?nが一つ余計でした。

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

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



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

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

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

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

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

お礼日時:2010/07/19 22:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!