Я пытаюсь послать одну часть текста на сервер, но пока не повезло. То, что я делаю, - это использовать код ниже для отправки строки на сервер. Чтобы проверить, получает ли сервер какие-либо данные, я использую следующее:
<?php
print_r($_FILES);
?>
ПОЧЕМУ СТРОКА:
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"http://[webaddress]/[page].php"]];
[request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
[request setHTTPShouldHandleCookies:NO];
[request setTimeoutInterval:30];
[request setHTTPMethod:@"POST"];
NSString *boundary = @"V2ymHFg03ehbqgZCaKO6jy";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request setValue:contentType forHTTPHeaderField: @"Content-Type"];
NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",@"test"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"%@\r\n",@"testvalue"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
NSString *postLength = [NSString stringWithFormat:@"%d", [body length]];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:body];
connection=[[NSURLConnection alloc]initWithRequest:request delegate:self];
[connection start];
В моей тестовой среде я использую реальный адрес, но для безопасности я его удалил. Я использую NSLog для возврата результата сервера (используется в делегате NSURLConnection). Но моя проблема в том, что $ _FILES продолжает возвращаться пустым? Странно то, что при использовании следующего с изображением он возвращает мне что-то:
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"http://[webaddress]/[page].php"]];
[request setHTTPMethod:@"POST"];
NSString *boundary = @"---------------------------14737809831466499882746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];
NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[ NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@\"\r\n",name] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:data]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
// setting the body of the post to the request
[request setHTTPBody:body];
connection=[[NSURLConnection alloc]initWithRequest:request delegate:self];
[connection start];
Поэтому, чтобы загрузить изображение (последний фрагмент кода), $ _FILES не пуст, и при использовании первого фрагмента кода он пуст. Сервер работает нормально, и файл, используемый для возврата $ _FILES, является обычным файлом PHP. PHP работает, и тот факт, что изображение может быть загружено, дает мне представление о том, что в первой части кода есть ошибка, а не сервер.
Поэтому мой вопрос в том, почему пустые $ _FILES при загрузке обычной строки?
Данные/информация о $_FILES
будут в $_FILES
а опубликованные данные формы (строки) будут в $_POST
или если вы используете данные метода get, будет в $_GET
.
start
сinitWithRequest
если вы не используете представление сstartImmediately
установленным вNO
. По сути, вы начинаете соединение дважды. Удалить звонок, чтобыstart
. См. Документацию для методаstart
для получения дополнительной информации.