說明:face.com已經被facebook收購,停止了人臉識別的服務了。
(接上篇)以faceapi.cn爲例,先向faceapi.cn申請api_key和api_secret,有了這2個東西你就能向server提交你的表單,並等待返回。下面貼上我的代碼:
NSMutableData *postData = [[NSMutableData alloc]init];
_request = [[NSMutableURLRequest alloc]initWithURL:self.serviceURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15];
[_request setHTTPMethod:@"POST"];
NSString *boundary = @"-----0xKhTmLbOuNdArY";
NSString *mycontent = [NSString stringWithFormat:@"multipart/form-data;boundary=%@",boundary];
[_request setValue:mycontent forHTTPHeaderField:@"Content-type" ];
[postData appendData:[[NSString stringWithFormat:@"--%@\r\n",boundary]dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[[NSString stringWithFormat:@"Content-Disposition:form-data;name=\"api_key\"\r\n\r\n"]dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[[NSString stringWithFormat:@"%@\r\n",APIKEY] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[[NSString stringWithFormat:@"--%@\r\n",boundary]dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[[NSString stringWithFormat:@"Content-Disposition:form-data;name=\"api_secret\"\r\n\r\n"]dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[[NSString stringWithFormat:@"%@\r\n",APISECRET] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[[NSString stringWithFormat:@"--%@\r\n",boundary]dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[[NSString stringWithFormat:@"Content-Disposition:form-data;name=\"img_file\";filename=\"%@\"\r\n",@"test.jpg"]dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[[NSString stringWithFormat:@"Content-Type:image/pjpeg\r\n\r\n"]dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:data];
[postData appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[[NSString stringWithFormat:@"--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[_request setValue:[NSString stringWithFormat:@"%d",[postData length]] forHTTPHeaderField:@"Content-Length"];
[_request setValue:@"zh-CN" forHTTPHeaderField:@"Accepte-Language"];
[_request setHTTPBody:postData];
_connection = [[NSURLConnection alloc]initWithRequest:self.request delegate:self startImmediately:YES];
回調函數包括其返回的JSON解析,就不寫了, 這2個宏就是我的api_key和api_secret,對應URL提交對應的表單就ok了,很簡單,其他我不贅述了,在faceapi.cn中都又簡單的介紹。最近實在比較忙,哪位看到的地方,可以再交流。
接上回,上面這段代碼只是一個簡單的表單提交,這裏要注意的是\r\n和\n的區別,在windows和linux以及mac中換行是不一樣的,在拼湊表單的時候一定要注意了,我當時就浪費了好幾個小時在上面。
好了,我們獲得數據了,將其解析成字典就可以用了。
那這裏面就涉及到一個問題,設置超時的問題,官方的URLConnection在這做的不好,默認的時間是240秒超時,我們不能這麼做因爲這是一個非常不好的用戶體驗,這裏有2個做法:1.用ASIHttpFormRequst,這個非常好用。2或者自己定義timmer來控制超時的時間。