NSMutableURLRequest setHTTPBody - PullRequest
       3

NSMutableURLRequest setHTTPBody

1 голос
/ 16 июня 2011

Я взял этот код из другого вопроса, и мой файл сценария содержит больше входных данных, не только mydata, но и данные, входящие в mydata, не должны быть статическим текстом, они должны быть из строки NSString.

Итак, мой вопрос: как мне разместить несколько фрагментов данных в моем скрипте и как мне ввести значение из строки NSString, потому что я понимаю, что не могу использовать строки NSString с типами данных c. не уверен, что это правильная терминология, поэтому, пожалуйста, поправьте меня, если я ошибаюсь.

const char *bytes = "mydata=Hello%20World";

NSURL *url = [NSURL URLWithString:@"http://www.mywebsite.com/script.php"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

[request setHTTPMethod:@"POST"];
[request setHTTPBody:[NSData dataWithBytes:bytes length:strlen(bytes)]];

NSURLResponse *response;
NSError *err;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
//NSString *responseString = [[NSString alloc] initWithFormat:@"%@", responseData];
NSLog(@"responseData: %@", responseData);

userData = responseData;

Новый вопрос, используя ответ ниже

NSMutableData *data = [NSMutableData data]; 

NSString *number = numberIB.text;
NSString *name = nameIB.text;

NSString *nameString = [[NSString alloc] initWithFormat:@"name=", name];
NSString *numberString = [[NSString alloc] initWithFormat:@"number=", number];

NSLog(nameString);
NSLog(numberString);

[data appendData:[nameString dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[numberString dataUsingEncoding:NSUTF8StringEncoding]];

NSURL *url = [NSURL URLWithString:@"http://www.siteaddress.com/test.php"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

[request setHTTPMethod:@"POST"];
//[request setHTTPBody:[NSData dataWithBytes:data length:strlen(data)]];
[request setHTTPBody:data];

NSURLResponse *response;
NSError *err;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
//NSString *responseString = [[NSString alloc] initWithFormat:@"%@", responseData];
NSLog(@"responseData: %@", responseData);

NSLogs для nameString и numberString возвращают name = и number = без каких-либо данных. не вызывая отправку данных в мой скрипт.

1 Ответ

3 голосов
/ 16 июня 2011

Вы можете использовать объект NSMutableData для добавления байтов по мере необходимости, например:

NSMutableData *data = [NSMutableData data]; 
const char *bytes = "mydata=Hello%20World";
[data appendBytes:bytes length:strlen(bytes)];

//...

const char *moreBytes = "&someMoreData=Fantastic";

[data appendBytes:moreBytes length:strlen(moreBytes)];

Редактировать: Если вы хотите добавить NSString в буфер данных, вы можете использовать -[NSString dataUsingEncoding:] и передать его -appendData:

NSString *someString = @"blah";
[data appendData:[someString dataUsingEncoding:NSUTF8StringEncoding]];

[request setHTTPBody:data];
...