2011-12-21 2 views
1

dataWithContentsOfURL - サーバーから期待されるものは何ですか?私は、URLの内容でのNSDataを作成しようとしています

NSString *theUrl = [NSString stringWithString:@"http://127.0.0.1:8090"]; 
NSError *connectionError = nil; 
NSData *inData = [NSData dataWithContentsOfURL:[NSURL URLWithString:theUrl] options:NSDataReadingUncached error:&connectionError]; 
NSInteger code = [connectionError code]; 
if (code != 0) 
{ 
    NSString *locDesc = [NSString stringWithString:[connectionError localizedDescription]]; 
    NSString *locFail = [NSString stringWithString:[connectionError localizedFailureReason]]; 
    NSLog(@"Error: %d %@ %@", code, locDesc, locFail); 
} 
else if ([inData length] == 0) 
{ 
    NSLog(@"No data"); 
} 

私はクライアントにHello Worldのを返し、ローカルホスト上で実行されている、超簡単なJava HTTP Serverを持っている:

DataOutputStream os = new DataOutputStream(s.getOutputStream()); // s is the socket 
os.writeBytes(new String("Hello World\0")); 
os.flush(); 
os.close(); 
s.close(); 

Google Chromeをhttp://127.0.0.1:8090にすると、Hello Worldが期待通りに表示されるので、データが返されます。 objective-cコードを実行すると、inDataは空(0x0、データ長は0)で、エラーコードは0なので、検査するエラーはありません。私がURLを "http://www.google.com"に変更すると、データ長が> 0になるとうまくいくように見えます。

ローカルhttp-serverに行くと、inDataが空である理由が私の質問です。ストリームは特定のデータシーケンスで終了する必要がありますか?

答えて

0

もう少し文脈が役立ちますが、あなたの「超シンプルな」HTTPサーバはNSURLが期待するものではなくヘッダを送信しないというのは間違いありません。

curl -i http://127.0.0.1:8090さんの出力が実際にどのように見えるか試しましたか?

+0

大きなコマンド!出力はHello Worldと他にはありません。それは私がデバイスをつかまえることができると思ったものです。 dataWithContentsOfURLを使用してプレーンテキストを読み取ることはできませんか?私はスーパーシンプルなサーバーから返すJSONデータを読む予定です。ヘッダーを追加する必要があると思いますか? URLから画像を読み込むだけの場合はどうすればいいですか?その場合、ヘッダーは設定されません。 – Henrik

+0

実際には、次のものを返すと動作します。 "Content-Type:text/plain; charset = utf-8 \ nHello World \ 0 \ n" – Henrik

+0

ヘッダーをペイロードから分離するために2つの '\ n 'は必要ありませんか? – Monolo

1

サーバは、想定されているHTTPステータスコードを出力していますか?レスポンスに要求が正常に完了したことを示す200のステータスが含まれていないと、dataWithContentsOfURL:options:error:が失敗する可能性があります。

+0

実際に私はあなたが見ているものを返すだけです: "Hello World"。他に何もない。私はJSONデータを返すことを計画しており、後でそれをデバイス上で解析したいと考えています。それでもHTTPステータスを送信する必要がありますか? – Henrik

+0

実際には、次のものを返すと動作します。 "Content-Type:text/plain; charset = utf-8 \ nHello World \ 0 \ n" – Henrik

関連する問題