Отправка данных формы через HTTP Post [Цель C] - PullRequest
0 голосов
/ 30 марта 2011

У меня есть данные формы из приложения iphone, которое должно отправлять переменные HTTP Post на URL.

Дело в том, что мне сказали не использовать setHTTPBody, но я не уверен, как ещесделайте это, поскольку каждый пример, который я вижу, использует setHTTPBody;даже те, которые используют методы POST.

Чтобы все стало немного сложнее, URL / веб-странице требуются submit=true и action=enquiry в переменных записи.

Вот что у меня естьпока.

NSString *formContactName   = [self contactName];
NSString *formEmail     = [self email];
NSString *formPhone     = [self phone];
NSString *formComments      = [self comments];

// The above data is fine, as explored here.
NSLog(@"formContactName = %@", formContactName);
NSLog(@"formEmail = %@", formEmail);
NSLog(@"formPhone = %@", formPhone);
NSLog(@"formComments = %@", formComments);

// Setup request
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:advertURL]];
[request setHTTPMethod:@"POST"];

// set headers
NSString *contentType = [NSString stringWithFormat:@"text/plain"];
[request addValue:contentType forHTTPHeaderField:@"Content-Type"];

// setup post string
NSMutableString *postString = [[NSMutableString alloc] init];   
[postString appendFormat:@"contactname=%@", formContactName];
[postString appendFormat:@"&email=%@", formEmail];
[postString appendFormat:@"&phone=%@", formPhone];
[postString appendFormat:@"&comments=%@", formComments];
[postString appendFormat:@"&submit=yes"];
[postString appendFormat:@"&action=enquiry"];

// I've been told not to use setHTTPBody for post variables, but how else do you do it?
[request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];

// get response
NSHTTPURLResponse *urlResponse = nil;
NSError *error = [[NSError alloc] init];

NSData *responseData = [NSURLConnection sendSynchronousRequest:request 
                         returningResponse:&urlResponse 
                                     error:&error];

NSString *result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];


NSLog(@"Response code: %d", [urlResponse statusCode]);
if ([urlResponse statusCode] >=200 && [urlResponse statusCode] <300)
{
NSLog(@"Response ==> %@", result);
}

[result release];
[error release];

Я всегда получаю результат 200, и это хорошо.Но ответный ответ указывает, что переменные Post не проходят.

Ответный ответ имеет поле, называемое «enquirysent», и оно всегда пустое.Если переменные Post успешны, он должен возвращать «1» или истинное утверждение.

"enquirysent": ""

Поэтому мой вопрос таков: как заставить переменные HTTP-POST в вышеуказанном запросе?

Спасибо.

1 Ответ

4 голосов
/ 30 марта 2011

Вы можете использовать ASIHTTPRequest для упрощения:

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:@"Ben" forKey:@"first_name"];
[request setPostValue:@"Copsey" forKey:@"last_name"];
[request setFile:@"/Users/ben/Desktop/ben.jpg" forKey:@"photo"];
...