同步HTTPS POST请求iOS

对于Android,我可以通过以下方式发送POST请求:

HttpClient http = new DefaultHttpClient(); HttpPost request = new HttpPost("https://somewebsite.com"); request.setEntity(new StringEntity(data)); http.execute(request); 

但是,在iOS上,我得到以下错误:

 NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9843) 

在iOS上使用https执行同步POST请求的最佳方式是什么?

你可以试试这个function:

 -(NSData *)post:(NSString *)postString url:(NSString*)urlString{ //Response data object NSData *returnData = [[NSData alloc]init]; //Build the Request NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:urlString]]; [request setHTTPMethod:@"POST"]; [request setValue:[NSString stringWithFormat:@"%lu", (unsigned long)[postString length]] forHTTPHeaderField:@"Content-length"]; [request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]]; //Send the Request returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil]; //Get the Result of Request NSString *response = [[NSString alloc] initWithBytes:[returnData bytes] length:[returnData length] encoding:NSUTF8StringEncoding]; bool debug = YES; if (debug && response) { NSLog(@"Response >>>> %@",response); } return returnData; } 

这里是你如何使用它:

 NSString *postString = [NSString stringWithFormat:@"param=%@",param]; NSString *urlString = @"https://www.yourapi.com"; NSData *returnData = [self post:postString url:urlString]; 

编辑:

我在源代码中find错误代码:

errSSLHostNameMismatch = -9843, /* peer host name mismatch */

这个问题应该在你的服务器上解决。

这里是从文档 :

errSSLHostNameMismatch -9843连接的主机名称与证书所允许的任何主机名称不匹配。 这通常是由与stream的kCFStreamPropertySSLSettings键关联的字典中的kCFStreamSSLPeerName属性的值不正确造成的。 在OS X v10.4及更高版本中可用。

希望这个帮助