I’m using NSMutableURLRequest to post some data to a password protected web server. I’ve gotten connected and everything, and I can retrieve data fine, but for some reason I am not able to post any.
I’m using NSURLCredentials for the username and password, and connecting is no problem.
Starting URL request:
-(void)starting {
NSURL *url = [NSURL
URLWithString:@"http:myurl/myfile.txt"];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
urlConnection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self]; //Calling NSURLConnection delegate methods
}
Converting NSString I want to post to NSData:
NSString *someString = @"Hello World";
NSData* theData=[someString dataUsingEncoding:NSUTF8StringEncoding];
NSURL *someUrl = [NSURL URLWithString:@"http://myurl/myfile.txt"];
Writing to web server:
NSString *postLength = [NSString stringWithFormat:@"%d", [theData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:someUrl];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:theData];
Allow any https certificates:
[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[someUrl host]];
Sending request for retrieval:
NSError *error;
NSURLResponse *response;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *data=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
Does length of retrieved data = 0..
if ([data length] == 0) {
UIAlertView *dataLengthNoneAlert = [[UIAlertView alloc] initWithTitle:@"No data" message:@"There is no data on the server" delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil, nil];
[dataLengthNoneAlert show];
}
If not, tell me new data.. (Which should be “Hello World”)
else {
NSLog(data);
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Retrieved data" message:data delegate:nil cancelButtonTitle:@"Dimiss" otherButtonTitles:nil, nil];
[alert show];
}
So I ‘attempt’ to post the data to the web server, and then retrieve it right after. I find that the length of the data I just supposedly wrote is 0. I even check the server outside of the application, and nothing changes. The url is valid. This is my first time using NSMutableURLRequest, am I missing something?
Not a complete expert but a couple of things to try that have worked for me.
It might be better to store your response as type
NSMutableDatainstead ofNSDatabecause this allows for a continous dynamic responsehttps://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsurlconnection_Class/Reference/Reference.html
Also apples documentation of
NSUrlconnection^ suggests the use of 4 methods,didRecieveResponse, didRecieveData, didFailwithErroranddidFinishLoadingwhich aid in appending and interpreting data.hope this helps.