同步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及更高版本中可用。
希望这个帮助