If you have input into the API, then you might also point out that the 
credentials in the XML are redundant since they're already present in the 
Authorization header.

—Jens 

> On Jul 4, 2015, at 11:42 PM, Antonio Nunes <[email protected]> wrote:
> 
> 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/jens%40mooseyard.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]

Reply via email to