0

バックエンド サーバーと通信する必要がある iPad アプリを作成しています。問題は、私が持っているコードが失敗していて、その理由がわからないことです。「curl」を使用すると、期待どおりの応答が得られます。

これはcurlの使用法です:

curl -X POST -H "Content-Type: application/json;charset=UTF-8" -d '{"userName":"foo2@foolinator.com", "password":"password"}' "http://server.local/signature/service/auth/rest/firewall/login" --dump-header headers

「ヘッダー」ファイルを開くと、期待どおりの 302 の応答が返され、Cookie に情報が含まれています。ただし、私の目的の C コードでは、「内部サーバー エラー」の応答が返されます。

// Create the request.
NSString* loginURL = @"http://server.local/signature/service/auth/rest/firewall/login";
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:loginURL]];

    NSString* credentials = @"'{\"userName\":\"foo2@foolinator.com\", \"password\":\"password\"}'";
NSData* connectionData = [credentials dataUsingEncoding:NSUTF8StringEncoding];

    [request setHTTPBody:patientConnectionData];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json;charset=UTF-8" forHTTPHeaderField:@"Content-Type"];

// Logging in...
NSError* error = nil;
NSURLResponse* response;
NSData* result = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*) response;
NSString* mime = [httpResponse MIMEType];
NSString* responseString = [NSHTTPURLResponse localizedStringForStatusCode:[httpResponse statusCode]];

応答はエラー 500: 内部サーバー エラーです。私は何を間違っていますか?

4

1 に答える 1

0

そのため、WireShark を使用して、curl を使用した成功したリクエストを確認し、上記のコードと比較することができました。ユーザー名/パスワード辞書から一重引用符を削除し、本文を次の行に変更したようです。

[request setHTTPBody:[credentials dataUsingEncoding:NSASCIIStringEncoding
                               allowLossyConversion:YES]];

トリックはありますか... WireSharkによると、質問で見られるPOSTと、何らかの理由で明らかに失敗するセカンダリGETの2つのリクエストが通過しているように見えます。その 2 番目のリクエストが発生している理由がわかりません。別の質問に投稿します。

于 2013-10-29T14:16:36.443 に答える