1

私は http 経由で投稿しようとしていますが、成功していません。ここに私のコードがあります

NSError *error;
NSHTTPURLResponse *response;

NSData *posting =
[NSJSONSerialization dataWithJSONObject:[input createJsonDictionary]
                                options:0
                                  error:&error];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@", kURL]];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];

[urlRequest setHTTPMethod:@"POST"];
[urlRequest setValue:@"application/json"
  forHTTPHeaderField:@"Content-Type"];
[urlRequest setValue:[NSString stringWithFormat:@"AuthToken %@",token]
  forHTTPHeaderField:@"Authorization"];
[urlRequest setHTTPBody:posting];

NSData *urlResponse =
[NSData dataWithData:[NSURLConnection sendSynchronousRequest:urlRequest
                                           returningResponse:&response error:&error]];
NSDictionary *jsonDictionary =
[NSJSONSerialization JSONObjectWithData:urlResponse
                                options:0
                                  error:&error];

NSLog(@"status code: %i", [response statusCode]);

NSLog(@"URL: %@", [urlRequest URL]);
NSLog(@"header: %@ \n method: %@", [urlRequest allHTTPHeaderFields], [urlRequest HTTPMethod]);
NSLog(@"body: %@\n", [[NSString alloc] initWithData:[urlRequest HTTPBody] encoding:NSUTF8StringEncoding]);

NSLog でステータス コード 500 が返されます。エラーがあります。しかし、cURLを使用して同じコマンドを実行しようとすると

curl --request POST -H "Content-Type: application/json" 
-H "Authorization: AuthToken TOKEN" --data '{"DATA"}' -sL 
-w "\\n%{http_code} %{url_effective}\\n" https://URL.com

ステータス コード 201 が返されました。成功です。私のコードで何かがおかしいようです。また、urlRequest の NSLogs では、curl コマンドの内容と同じです。私が間違っていることはありますか?

4

2 に答える 2

0

私自身の答えを見つけました。問題は、私のコードがサーバーを同期的に呼び出していて、サーバーが同期Web呼び出しを行うように設定されていなかったことです。代わりに、NSURLConnectionのインスタンス変数を使用し、非同期で「sendAsynchronousRequest:queue:completionHandler:」を呼び出し、インスタンス変数でメソッドstart/cancelを使用する必要がありました。

于 2012-10-02T14:14:59.057 に答える
0

それ以外の

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@", kURL]];

試す

NSString *urlText = [NSString stringWithFormat:@"%@", kURL];
urlText = [urlText stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:urlText];
于 2012-09-28T15:48:19.187 に答える