Я пытаюсь извлечь заголовки HTTP и код ответа HTTP из синхронного HTTP-запроса на iPhone. У меня, как правило, нет проблем с асинхронными запросами, хотя здесь немного проблем. Заголовки ответа HTTP имеют нулевое значение, а код состояния HTTP равен 0. Веб-сервер настроен правильно, и я могу получить необходимые сведения в асинхронных запросах. Вот мой код, скопированный в программу командной строки:
Проблема № 1: [httpResponse allHeaderFields] возвращает ноль.
Проблема № 2: [httpResponse statusCode] возвращает 0.
Неправильно ли я понимаю, что при возникновении ошибки, которая теперь отображается как: Error Domain = NSURLErrorDomain Code = -1012 UserInfo = 0x14b100 "Операция не может быть завершена. (NSURLErrorDomain error -1012.)", что я не получаю доступ к http заголовкам ответа / коду статуса?
#import <Foundation/Foundation.h>
int main (int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *urlStr = @"http://tmp/myscript.php";
NSString *postBody = @"foo=bar";
NSMutableURLRequest *request;
NSData *postData = [postBody dataUsingEncoding:NSASCIIStringEncoding];
NSError *error;
NSURLResponse *response;
NSHTTPURLResponse *httpResponse;
NSData *dataReply;
id stringReply;
request = [NSMutableURLRequest requestWithURL: [NSURL URLWithString:urlStr]];
[request setHTTPMethod: @"POST"];
[request setHTTPBody:postData];
[request setValue:@"text/xml" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
dataReply = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
stringReply = (NSString *)[[NSString alloc] initWithData:dataReply encoding:NSUTF8StringEncoding];
// Some debug code, etc.
NSLog(@"reply from server: %@", stringReply);
httpResponse = (NSHTTPURLResponse *)response;
int statusCode = [httpResponse statusCode];
NSLog(@"HTTP Response Headers %@", [httpResponse allHeaderFields]);
NSLog(@"HTTP Status code: %d", statusCode);
// End debug.
[[NSRunLoop currentRunLoop] run];
[pool release];
return 0;
}