Thanks for that link Avi. By the way, I don’t want to do it this way, but this is what the API developer asked me to use. I’ll get back to him and will ask for a better API.
-António > On 05 Jul 2015, at 07:18, Avi Drissman <[email protected]> wrote: > > You probably shouldn't be doing that. It violates the spirit of GET if not > the letter of the spec. > > http://stackoverflow.com/questions/978061/http-get-with-request-body > > I wouldn't be surprised if your inability to make NSURLRequest do it was > intentional on the part of the NSURLRequest designers. > > Avi > > On Jul 5, 2015, at 01:55, Antonio Nunes <[email protected]> wrote: > >> I have the following curl command to a web api, which retrieves some info: >> curl -X GET -H 'Authorization: Basic blabla' -H 'Content-Type: >> application/xml; charset=utf-8' -H 'Accept-Language: en' -d >> "<user><account_attributes><email>[email protected]</email><password>SomePassWord</password></account_attributes></user>" >> 'https://example.com/api/v1/endpoint >> >> The -d and xml-string are mandatory for this GET command. I haven’t been >> able to translate this into an equivalent NSURLRequest that gets accepted by >> the server. It appears that an HTTPBody on a GET request is not honoured by >> NSURLRequest. >> >> This is the code I use to make the request (on iOS): >> NSURLCredential *credential = [[WRTSServerEngine sharedServerEngine] >> savedCredentialsForHost:@“example.com" >> >> port:0 >> >> protocol:@"https" >> >> realm:@“SomeRealm"]; >> >> NSMutableURLRequest *request = [[NSMutableURLRequest alloc] >> initWithURL:[NSURL URLWithString:@"https://example.com/api/v1/endpoint"]]; >> >> NSString *authStr = [NSString stringWithFormat:@"%@:%@", credential.user, >> credential.password]; >> NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding]; >> NSString *authValue = [NSString stringWithFormat: @"Basic %@",[authData >> base64EncodedStringWithOptions:0]]; >> [request setValue:authValue forHTTPHeaderField:@"Authorization"]; >> [request setValue:@"nl, en-us" forHTTPHeaderField:@"Accept-Language"]; >> [request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; >> >> NSString *infoAsXMLString = @"<user>"; >> infoAsXMLString = [infoAsXMLString >> stringByAppendingString:@"<account_attributes>"]; >> infoAsXMLString = [infoAsXMLString >> stringByAppendingFormat:@"<email>%@</email>", credential.user]; >> infoAsXMLString = [infoAsXMLString >> stringByAppendingFormat:@"<password>%@</password>", credential.password]; >> infoAsXMLString = [infoAsXMLString >> stringByAppendingString:@"</account_attributes>"]; >> infoAsXMLString = [infoAsXMLString stringByAppendingString:@"</user>"]; >> [request setHTTPBody:[infoAsXMLString >> dataUsingEncoding:NSUTF8StringEncoding]]; >> >> NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration >> defaultSessionConfiguration]; >> sessionConfig.allowsCellularAccess = YES; >> NSURLSession *session = [NSURLSession >> sessionWithConfiguration:sessionConfig]; >> self.task = [session dataTaskWithRequest:request >> completionHandler:^(NSData *data, NSURLResponse >> *response, NSError *error) { >> NSLog(@"%@", error); >> }]; >> [self.task resume]; >> >> This results in the following error: >> Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." >> UserInfo=0x7ffd0b5f7a00 {NSUnderlyingError=0x7ffd0b58be50 "The operation >> couldn’t be completed. (kCFErrorDomainCFNetwork error -1005.)", >> NSErrorFailingURLStringKey=https://staging.wrts.nl/api/v1/existing_user, >> NSErrorFailingURLKey=https://staging.wrts.nl/api/v1/existing_user, >> _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-4, >> NSLocalizedDescription=The network connection was lost.} >> >> If I do not set an HHTPBody on the request, I get a 500 error (which makes >> sense, since the server is expecting a payload in the body). >> >> Is there any way to get the HHTPBody sent along with the GET request? >> >> -António >> >> >> _______________________________________________ >> Do not post admin requests to the list. They will be ignored. >> Macnetworkprog mailing list ([email protected]) >> Help/Unsubscribe/Update your Subscription: >> https://lists.apple.com/mailman/options/macnetworkprog/avi%40drissman.com >> >> This email sent to [email protected] _______________________________________________ Do not post admin requests to the list. They will be ignored. Macnetworkprog mailing list ([email protected]) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/macnetworkprog/archive%40mail-archive.com This email sent to [email protected]
