NSMutableURLRequest возвращает ноль с POST

Согласно заголовку, я считаю, что NSMutableURLRequest возвращает null, когда я добавляю запрос POST? Моя серверная часть настроена, и я могу curl -F "test=test" 127.0.0.1 получить желаемый результат.

Как вы можете видеть из приведенных ниже методов, я разместил несколько NSLog для проверки ошибок. Методы didReceiveResponse и connectionDidFinishLoading сработали, однако didReceiveData не удалось вызвать. Подобно тому, как если бы я не размещал сообщение POST, когда использовал завиток, и ничего не дало бы. Из этого следует, что я что-то упустил в методе viewDidLoad.

Я также добавил, как я отправляю ответ с сервера, используя кодировку json в самом низу.

Так я что-то пропустил?

- (void)viewDidLoad {
    NSString *yourPostString = [NSString stringWithFormat:@"test=test"];
    dataWebService = [NSMutableData data];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://127.0.0.1/"]];
    NSString *postLength =  [NSString stringWithFormat:@"%d", [yourPostString length]];

    [request addValue:@"text/html; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    [request addValue:postLength forHTTPHeaderField:@"Content-Length"];    
    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:[yourPostString dataUsingEncoding:NSUTF8StringEncoding]];

    myConnection = [NSURLConnection connectionWithRequest:request delegate:self];
    [myConnection start];  
}

 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse     *)response {
    [dataWebService setLength:0];
    NSLog(@"Received Response");   
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [dataWebService appendData:data];
    NSLog(@"working %@", data);
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSString *responseString = [[NSString alloc] initWithData:dataWebService encoding:NSUTF8StringEncoding];
    NSLog(@"Response: %@",responseString);
}

Вот функция отправки ответа.

function sendResponse($status = 200, $body = '', $content_type = 'text/html'){
    $status_header = 'HTTP/1.1 ' . $status . ' ' . getStatusCodeMessage($status);
    header($status_header);
    header('Content-type: ' . $content_type);
    echo $body;
}

person nimbus    schedule 24.12.2012    source источник
comment
Извините, никогда не знал об этой функции. :)   -  person nimbus    schedule 24.12.2012
comment
Без проблем. Вы просто не заставите никого тратить время на кого-то, кто не отдаст им должное за работу.   -  person Popeye    schedule 24.12.2012
comment
На самом деле это не ответ на ваш вопрос, но рассматривали ли вы возможность использования ASIHTTPRequest framework. Я считаю, что это намного проще в использовании. Вы также рассматривали возможность использования wireshark, чтобы увидеть, что вы отправляете и получаете в ответ на свой запрос. Вы можете пропустить что-то, что нужно отправить.   -  person Popeye    schedule 24.12.2012
comment
У меня есть, но он больше не обновляется, поэтому я пробую альтернативы.   -  person nimbus    schedule 24.12.2012
comment
этот код в порядке. Я проверил и запустил.   -  person Paul Nadolinskyi    schedule 24.12.2012


Ответы (1)


Запросы Content-Type должны быть установлены на application/x-www-form-urlencoded

person Evgeny Shurakov    schedule 24.12.2012