iPhone отправляет POST с NSURLConnection

У меня возникли проблемы с отправкой данных POST в PHP-скрипт с NSURLConnection. Это мой код:

const char *bytes = [[NSString stringWithFormat:@"\n%@", data] UTF8String]; NSURL *url = [NSURL URLWithString:@"http://myurl.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]; NSLog(@"responseData: %@", responseData); 

И мой script.php так же прост, как это:

  

Это работало для меня в прошлом, но почему-то я получаю выход из NSLog(@"responseData: %@", responseData); теперь это просто «» вместо «theData».

Наверное, какая-то хромая ошибка, но я не могу ее найти? Есть идеи?

Ваши данные неверны. Если вы ожидаете, что данные будут найдены в массиве PHP $ _POST, это должно выглядеть так:

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

Если вы хотите отправить XML-данные, вам нужно установить другой тип содержимого HTTP. Например, вы можете установить

 application/xml; charset=utf-8 

Если вы не задали тип содержимого HTTP, тип по умолчанию

 application/x-www-form-urlencoded 

будет использован. И этот тип ожидает, что данные POST будут иметь тот же формат, что и в запросе GET.

Однако, если вы задаете другой тип содержимого HTTP, например application / xml, то эти данные не добавляются в массив $ _POST в PHP. Вам нужно будет прочитать raw из входного streamа.

Попробуй это:

 NSString * str = [NSString stringWithFormat:@"\n%@", data]; [request setHTTPMethod:@"POST"]; [request setValue:@"application/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; [request setHTTPBody:[str dataUsingEncoding:NSUTF8StringEncoding]]; 

и на сервере попробуйте следующий PHP:

 $handle = fopen("php://input", "rb"); $http_raw_post_data = ''; while (!feof($handle)) { $http_raw_post_data .= fread($handle, 8192); } fclose($handle); 

Обратите внимание, что это работает только в том случае, если HTTP-заголовок вашего POST не является приложением / x-www-form-urlencoded. Если это application / x-www-form-urlencoded, то сам PHP считывает все данные post, декодирует (разбивает его на пары ключ / значение) и, наконец, добавляет его в массив $ _POST.

Ах да … ура. Но вывод responseData похож на «<48656c6c 6f326f72 6c64>», вы не печатаете NSData с помощью% @? – per_pilot Янв 15 ’10 в 13:57

это потому, что вы показываете значения «байтов», которые вы должны передать в NSString, чтобы увидеть реальное сообщение

 NSString *string = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding]; NSLog(@"responseData: %@", string); 
 NSString *post =[NSString stringWithFormat:@"usertype(%@),loginname(%@),password(%@)",txtuser.text,txtusername.text,txtpassword.text]; 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://www.dacinci.com/app/tes2/login_verify.php"]]; [request setHTTPMethod:@"POST"]; [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; [request setHTTPBody:postData]; NSError *error; NSURLResponse *response; NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; NSString *str=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding]; 

Данные POST и данные XML не совпадают. Вы можете отправлять XML-данные так же, как и вы, но PHP-код должен анализировать XML из тела запроса. PHP xml_parse ( http://php.net/manual/en/function.xml-parse.php ) может помочь вам в этом.

В качестве альтернативы, если вы предпочитаете отправлять данные POST, установите тело запроса следующим образом:

const char *bytes = [[NSString stringWithFormat:@"mydata=%@", data] UTF8String];

Если вы используете NSURLSession, то в iOS9 установите

 NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; [request addValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; [request addValue:@"application/json" forHTTPHeaderField:@"Accept"]; request.HTTPMethod = @"POST"; 

В наборе PHP

 //connection to the database $dbhandle = mysql_connect($hostname, $username, $password) or die("Unable to connect to MySQL"); echo "Connected to SQL."; //select a database to work with $selected = mysql_select_db($db,$dbhandle) or die("Could not select anons db"); echo "Connected to DB sucess."; mysql_query("SET NAMES 'utf8'"); mysql_query("SET CHARACTER SET 'utf8'"); mysql_query("SET SESSION collation_connection = 'utf8_general_ci'"); 

В db (MySql5) установите utf-8_generic.

  • Rails не правильно декодирует JSON из jQuery (массив становится хешем с целыми ключами)
  • cURL и HttpURLConnection - Опубликовать данные JSON
  • Получение ошибки 400 ошибок в JQuery AJAX POST
  • jQuery send string как параметры POST
  • Как отправить запрос HTTP POST на сервер из Excel с помощью VBA?
  • Как отправить JSON на сервер?
  • Использование curl для загрузки данных POST с файлами
  • C # HttpWebRequest типа «application / x-www-form-urlencoded» - как отправить символ «&» в теле контента?
  • application / x-www-form-urlencoded или multipart / form-data?
  • Android: UnknownHostException
  • Отправка файлов с помощью POST с HttpURLConnection
  • Interesting Posts

    Разделение общего кода и web.xml из проекта WAR в общий проект JAR

    Он открывает приглашение «открыть с» при каждом запуске запланированного задания

    Как разрешить внутренний MVC Web Api с внешнего сайта за пределами сети

    Как реализовать идентификацию имени сервера (SNI)

    Профилировщик для Visual Studio 2008, C ++?

    Проникновение NSXMLParser

    Как распечатать содержимое RDD?

    Создание электронной таблицы Excel из базы данных Oracle

    Веб-просмотр Android: загрузка файлов, таких как браузеры

    Сценарий FOSS для разблокировки PDF для печати

    Содержит ли соединение сокетов TCP «поддерживать»?

    Открытый оператор new, частный оператор delete: получение C2248 «не может получить доступ к частному пользователю» при использовании нового

    Как проверить, действительно ли значение enum?

    Скрипт Windows для копирования некоторого текста в буфер обмена?

    Можно ли динамически загружать библиотеку во время выполнения из приложения Android?

    Давайте будем гением компьютера.