XCode отправляет запрос Мыла HTTPS - PullRequest
3 голосов
/ 30 ноября 2011

Вчера сертификат HTTP был установлен на моем сервере, где работает мой веб-сервис. Перед установкой сертификата HTTP мое приложение для iPhone отправило запрос SOAP в веб-службу. Веб-служба успешно ответила, вернув сообщение XML.

Это код, который я использую для отправки запроса на мыло в веб-сервис:

NSString *soapMsg = [NSString stringWithFormat:@"" "" "" "" "%@" "%@" "" "" "", parameter1, parameter2];</p> <pre><code>NSURL *url = [NSURL URLWithString: @"http://domain.com/webservice-name.svc"]; NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url]; NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMsg length]]; [req addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; [req addValue:@"http://tempuri.org/webservice-name/method-name" forHTTPHeaderField:@"SOAPAction"]; [req addValue:msgLength forHTTPHeaderField:@"Content-Length"]; [req setHTTPMethod:@"POST"]; [req setHTTPBody:[soapMsg dataUsingEncoding:NSUTF8StringEncoding]]; NSURLResponse *response = nil; NSError *error = nil; NSData *resultsData = [NSURLConnection sendSynchronousRequest:req returningResponse:&response error:&error]; if(error){ NSLog(@"Error sending soap request: %@", error); return FALSE; } NSLog(@"%@", soapMsg); NSLog(@"%@", [[NSString alloc] initWithData:resultsData encoding:NSUTF8StringEncoding]);

Теперь, если я изменю URL-адрес на "httpS://domain.com/webservice-name.svc",, веб-служба вообще не отвечает.

Что мне нужно изменить, чтобы отправить успешный SOAP-запрос на защищенный веб-сервис HTTPS?

1 Ответ

2 голосов
/ 30 ноября 2011

Для обычного сервиса XML, использующего метод GET, запрос https работал у меня. Попробуйте использовать методы делегата, которые я использовал.


- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {
return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust];
}

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
NSArray *trustedHosts=[NSArray arrayWithObject:@"yourdomian.com"];
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust])
    if ([trustedHosts containsObject:challenge.protectionSpace.host])
        [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];

[challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...