QA@IT

RailsでiPhoneから送られたPUT通信が認識されない。

2616 PV

現在、iPhoneプログラミングをしているのですが、RailsサーバにPUT通信を送った際にデータを取得できません。

具体的にソース等で説明させていただきます。
まずiPhone側のソースを説明します

    NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://123.456.789/"]];

    [request setHTTPMethod:@"PUT"];
    [request setValue:@"text/plain"forHTTPHeaderField:@"Content-Type"];
    NSData *imageData = [@"win=true" dataUsingEncoding:NSUTF8StringEncoding];
    [request setHTTPBody:imageData];

    NSError* error=nil;
    NSData* response = [NSURLConnection sendSynchronousRequest:request
                                             returningResponse:nil error:&error];
    NSString *s = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];

これをRailsサーバで受けます。
以下にサーバのソースを書きます。

def update
     p params[:win]
end

結果はnilです。

なのでWireShark(パケットアナライザー)を使ってbody部?()のデータを見ました。
結果は

win=true

となっていました。
なのでiPhoneからは正常に送られているようなのですが、Railsで認識されていないように思えます。
またPOST通信は問題なく表示できます。

なぜこの様なことになるのでしょうか?お心当たりがあれば答えていただけると幸いです。

回答

例示されたコードだと Content-Type が text/plain なので、params でアクセスできないのだと思います。Content-Type を application/x-www-form-urlencoded にするか、params の代わりに request.body.read でアクセスしてみてください。POST だとなぜ成功するのかはわかりませんが...。

編集 履歴 (0)
  • なるほど、Content-Typeが原因だったんですね。勉強してみます、ありがとうございました。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。