Вы почти все сделали правильно!
Я вижу, что посту год, но в надежде, что он может помочь другим, и для моей собственной справки, я публикую это здесь.
Документация Apple для connection:didReceiveResponse:
гласит: -
Отправляется, когда соединение получило достаточно данных для построения URL-ответа на свой запрос.
Как и в большинстве документов Appleэто тоже сбивает с толку и может вводить в заблуждение.Обычно, когда у нас «достаточно данных для построения ответа URL», это означает, что у нас есть полный ответ, что также означает, что у нас также есть тело ответа;который универсально считается частью ответа.
Однако в этом случае объект NSHTTPURLResponse
не имеет тела.Поэтому я предполагаю, что Apple имеет в виду, что connection:didReceiveResponse:
вызывается, когда мы получили заголовок ответа, в котором «достаточно» данных, чтобы мы знали все об ответе, кроме фактических данных (тела).
Фактически много раз вы заметите, что connection:didReceiveData:
вызывается после вызова connection:didReceiveResponse:
.
Итак, мы можем изменить ваш код следующим образом: -
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
NSLog(@"web request started");
NSString *post = [NSString stringWithFormat:@"firstName=%@&lastName=%@&eMail=%@&message=%@", firstName.stringValue, lastName.stringValue, eMail.stringValue, message.stringValue];
NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding];
NSString *postLength = [NSString stringWithFormat:@"%ld", (unsigned long)[postData length]];
NSLog(@"Post data: %@", post);
NSMutableURLRequest *request = [NSMutableURLRequest new];
[request setURL:[NSURL URLWithString:@"https://example.com/form.php"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if(theConnection) {
webData = [NSMutableData data];
NSLog(@"connection initiated");
}
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[webData appendData:data];
NSLog(@"connection received data");
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
NSLog(@"connection received response");
NSHTTPURLResponse *ne = (NSHTTPURLResponse *)response;
if([ne statusCode] == 200) {
NSLog(@"connection state is 200 - all okay");
} else {
NSLog(@"connection state is NOT 200");
}
}
-(void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
NSLog(@"Conn Err: %@", [error localizedDescription]);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSLog(@"Conn finished loading");
NSString *html = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding];
NSLog(@"OUTPUT:: %@", html);
}