- [NSURLRequest sendSynchronousRequest: returningResponse: error:] получение HTTP-заголовков - PullRequest
4 голосов
/ 10 февраля 2009

Я пытаюсь извлечь заголовки 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;
} 

Ответы [ 2 ]

3 голосов
/ 10 февраля 2009

Полученный код ошибки - NSURLErrorUserCancelledAuthentication и задокументирован в Справочник основных констант . Возможно, вы пытаетесь загрузить страницу, защищенную паролем, в этом случае вам может потребоваться добавить имя пользователя и пароль к URL-адресу.

1 голос
/ 15 марта 2011

Проблема № 1: [httpResponse allHeaderFields] возвращает ноль. Проблема № 2: [httpResponse statusCode] возвращает 0.

Поскольку httpResponse равен нулю, см. здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...