一些情况下,为了安全起见,我们需要把get方式的http请求处理成post方式。
比如,我们从后台拿到一个访问链接,如:http://www.test.qq.com/api/do?type=1&reason=test&flag=2
希望按如下方式发送请求:
post url:http://www.test.qq.com/api/do
post 参数:type 1
reason test
flag 2
怎么做呢,贴个比较简单的方式,直接做url分解就可以了。
-(void)approval:(NSString *)approvalUrl
{
NSRange curRange = [approvalUrl rangeOfString:@"?"];
NSString *baseUrl = [approvalUrl mutableCopy];
NSString *paramStr = @"";
if (curRange.location != NSNotFound) {
baseUrl = [approvalUrl substringToIndex:curRange.location];
paramStr = [approvalUrl substringFromIndex:curRange.location+1];
}
NSURL *url = [NSURL URLWithString:[baseUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSLog(@"url is:%@", url);
NSDictionary *paramDic = [Utils parametersWithSeparator:@"=" delimiter:@"&" url:paramStr];
ASIFormDataRequest *request=[ASIFormDataRequest requestWithURL:url];
NSEnumerator *enumerator = [paramDic keyEnumerator];
id object;
while (object = [enumerator nextObject]) {
NSString *key = [NSString stringWithFormat:@"%@", object];
NSString *value = [NSString stringWithFormat:@"%@", [paramDic valueForKey:key]];
[request setPostValue:value forKey:key];
}
[request setTimeOutSeconds:5];
[request setCachePolicy:NSURLRequestReloadIgnoringCacheData];
[request setDelegate:self];
[request setDidFinishSelector:@selector(requestSuccess:)];
[request setDidFailSelector:@selector(requestError:)];
[request setValidatesSecureCertificate:NO];
[request startAsynchronous];
}
当然,如果需要做更复杂的url分解,可以考虑下正则表达式,后面再研究。