HttpPost не удается.Мне просто нужно отправить 3 пары ключ / значение - PullRequest
1 голос
/ 26 августа 2011

Возникли проблемы при отправке этого http сообщения.

Пары ключ-значение - это строчки и переменные

Я верю, когда я объединяю строку и переменные, но я не уверен. Я пытался сделать httpGet с NSURLDownload, но не смог. Я готов все еще делать "Получить", если бы я знал, как. Это однократное действие при первом использовании приложения. Так как же отправить пары ключ-значение обратно на мой сайт?

Я не получаю ошибок. Я просто не получаю никаких данных.

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex (NSInteger)buttonIndex
{
NSString *strProvider;
// the user clicked one of the OK/Cancel buttons
if (buttonIndex == 0)
{
   strProvider =@"AT&T";

}
if (buttonIndex == 1)
{
    strProvider =@"Verizon";
}
NSUserDefaults *gPhone =[NSUserDefaults standardUserDefaults];
NSString *myString=[gPhone stringForKey:@"phoneNumber"];


NSString *post = [NSString stringWithFormat:@"phone=",myString,@"&carrier=",strProvider,@"&appid=1"];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:@"http://rohrwebsolutions.com/api/newuser.php"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
}

Ответы [ 2 ]

3 голосов
/ 26 августа 2011

Не просматривал каждую строку вашего кода, но вы неправильно строите переменную строку.Метод stringWithFormat предполагает, что формат будет использоваться в качестве первого аргумента, а данные будут заменены в качестве оставшихся аргументов.

Так что вместо:

NSString *post = [NSString stringWithFormat:@"phone=",myString,@"&carrier=",strProvider,@"&appid=1"];

Вы хотите:

NSString * post = [NSString stringWithFormat:@"phone=%@&carrier=%@&appId=1", myString, strProvider];

Кроме того, мне кажется, что вы смешиваете методы GET и POST для вызова URL-запросов.Очень необычно создавать данные POST так, как вы показали в своем коде.


РЕДАКТИРОВАТЬ

Хорошо, основываясь на вашем комментариии ответ shawnwall, очевидно, вам нужен пример кода для выполнения URL-запросов.В сети есть тонна примеров и на SO, вот краткий фрагмент, который я извлек из одного из моих проектов.Он устанавливает синхронное (блокирующее) соединение с указанным URL-адресом для извлечения данных:

NSURLRequest * request = [NSURLRequest requestWithURL: [NSURL URLWithString: self.url]];
NSURLResponse * response = nil;
NSError * err = nil;

NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse: &response error: &err];
if(err != nil) {
    printf("Error while retrieving URL contents: %s\n", [[err description] UTF8String]);
} else {
    printf("Got %d bytes from server\n", [data length]);
}

Замените self.url соответствующей строкой URL-адреса (добавьте строку переменной к базовому URL-адресу).

2 голосов
/ 26 августа 2011

Вы делаете запрос, но фактически не используете его. Вам нужно использовать его с NSURLConnection, вот простая синхронная версия:

NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

В этой статье есть несколько полезных советов по асинхронности:

http://mobileorchard.com/tutorial-json-over-http-on-the-iphone/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...