Согласно заголовку, я считаю, что NSMutableURLRequest
возвращает null
, когда я добавляю запрос POST? Моя серверная часть настроена, и я могу curl -F "test=test" 127.0.0.1
получить желаемый результат.
Как вы можете видеть из приведенных ниже методов, я разместил несколько NSLog
для проверки ошибок. Методы didReceiveResponse
и connectionDidFinishLoading
сработали, однако didReceiveData
не удалось вызвать. Подобно тому, как если бы я не размещал сообщение POST, когда использовал завиток, и ничего не дало бы. Из этого следует, что я что-то упустил в методе viewDidLoad
.
Я также добавил, как я отправляю ответ с сервера, используя кодировку json в самом низу.
Так я что-то пропустил?
- (void)viewDidLoad {
NSString *yourPostString = [NSString stringWithFormat:@"test=test"];
dataWebService = [NSMutableData data];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://127.0.0.1/"]];
NSString *postLength = [NSString stringWithFormat:@"%d", [yourPostString length]];
[request addValue:@"text/html; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request addValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:[yourPostString dataUsingEncoding:NSUTF8StringEncoding]];
myConnection = [NSURLConnection connectionWithRequest:request delegate:self];
[myConnection start];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[dataWebService setLength:0];
NSLog(@"Received Response");
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[dataWebService appendData:data];
NSLog(@"working %@", data);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSString *responseString = [[NSString alloc] initWithData:dataWebService encoding:NSUTF8StringEncoding];
NSLog(@"Response: %@",responseString);
}
Вот функция отправки ответа.
function sendResponse($status = 200, $body = '', $content_type = 'text/html'){
$status_header = 'HTTP/1.1 ' . $status . ' ' . getStatusCodeMessage($status);
header($status_header);
header('Content-type: ' . $content_type);
echo $body;
}
ASIHTTPRequest
framework. Я считаю, что это намного проще в использовании. Вы также рассматривали возможность использования wireshark, чтобы увидеть, что вы отправляете и получаете в ответ на свой запрос. Вы можете пропустить что-то, что нужно отправить. - person Popeye   schedule 24.12.2012