2014-01-22 3 views
0

Я изо всех сил пытаюсь понять, как взаимодействовать с этим блоком HTML на веб-сайте. Я взаимодействую с Objective-C. На веб-странице есть текстовая область, которую вы можете ввести, и на ней есть кнопка отправки. HTML выглядит следующим образом:Как отправить POST в «textarea» с NSURLConnection?

<fieldset> 

<textarea id="postbody" cols="40" rows="5" name="postbody"> 

This has now been taken. Thank you to everyone who has shown an interest. 

</textarea> 

<br> 
<input type="submit" value="Send TAKEN message"> 

</fieldset> 

Во всяком случае, я пытаюсь взаимодействовать с этим сайтом, используя NSURLConnection:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:modifiedURL] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; 

NSString *convertedString=[NSString stringWithFormat:@"postbody=%@", @"This item has been received"]; 
[request setHTTPBody:[NSData dataWithBytes:[convertedString UTF8String] length:strlen([convertedString UTF8String])]];//this attaches the username and password key we created with convertedString to the request we just initialized 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[request setHTTPMethod:@"POST"];//we're sending information TO the site 

self.safetyRequest = request;//this is to handle the possibility that the user hits back and chooses the same menu item more than once. 

[self setReceivedData:[NSMutableData dataWithCapacity: 0]];//make sure we re-initialize our data container 

[self setTheConnection:[[NSURLConnection alloc] initWithRequest:request delegate:self]];//this fires off the URL request to the web!! This is an asynchronous request, so we need to implement the delegates for NSURLConnection. 

Это, однако, не работает по какой-то причине. Сайт не отвечает и не выполняет требуемые действия по отправке ответа и отправке его. Что я делаю не так?

+0

Вы можете уточнить "сайт не отвечает"? Вы просмотрели ответ, полученный в 'connection: didReceiveResponse:'? Что такое 'statusCode'? Вы обрабатывали ошибки в 'connection: didFailWithError:'? Все, что там было? Даже если ответ был искажен, вы бы ожидали 'didReceiveResponse' или' didFailWithError', по крайней мере. – Rob

+0

Я узнал, что я делаю неправильно. Я фактически отправлял URL-адрес, который не принимает POSTing. Когда вы нажимаете кнопку отправки, она фактически отправляет эту информацию на другой URL-адрес. Как только я это выяснил, все получилось просто отлично. Спасибо всем кто ответил! – Dave

ответ

0

Как указано в W3C spec для application/x-www-form-urlencoded, вы должны процентов, избежать данных вы размещаете, которые вы можете сделать с CFURLCreateStringByAddingPercentEscapes, такие как:

NSString *convertedString = [NSString stringWithFormat:@"postbody=%@", [self percentEscapeString:@"This item has been received"]]; 
[request setHTTPBody:[convertedString dataUsingEncoding:NSUTF8StringEncoding]]; 

Где у вас есть метод, который вызывает CFURLCreateStringByAddingPercentEscapes:

- (NSString *)percentEscapeString:(NSString *)string 
{ 
    NSString *result = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, 
                       (CFStringRef)string, 
                       (CFStringRef)@" ", 
                       (CFStringRef)@":/[email protected]!$&'()*+,;=", 
                       kCFStringEncodingUTF8)); 
    return [result stringByReplacingOccurrencesOfString:@" " withString:@"+"]; 
} 
+0

Возможно, нет необходимости указывать, но используя фреймворк, такой как [AFNetworking] (https://github.com/AFNetworking/AFNetworking), вы получаете из сорняков построение хорошо сформированных запросов 'x-www-form-urlencoded'. Это стоит рассмотреть. – Rob

0

обрабатывать ваши данные результата с помощью методов делегата NSURLConnection

NSString *post = [NSString stringWithFormat:@"postBody=%@",@"Raja"]; 
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
    NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[post length]]; 

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://localhost/promos/index.php"]]; 


    [request setHTTPMethod:@"POST"]; 
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
    [request setHTTPBody:postData]; 

    NSURLConnection *theConnection = [NSURLConnection connectionWithRequest:request delegate:self]; 

    if(theConnection){ 
     // indicator.hidden = NO; 
     mutableData = [[NSMutableData alloc]init]; 
    } 

ваш PHP код

<?php 
    $result = $_POST['postBody']; 


    echo $result; 
?> 
Смежные вопросы