我正在尝试调用drupal搜索网络服务,但是当我调用它时,它表示该请求为空。
我在我的代码中添加了一些日志并看到NSString很好但是当我定义我的NSURL时,NSString被视为null ...有人可以解释一下我的问题是什么吗?
以下是我的代码:
- (void)FindProductsByKeyword:(NSString *)keyword :(void(^)(NSArray *produits))success
{
__block NSArray *produits = [[NSArray alloc]init];
NSString *fullUrl = [NSString stringWithFormat:@"%@%@?filter[title]=\%%%@\%%&filter_op[title]=LIKE", WEBSERVICES_URL, PRODUCT_DISPLAY_URL, keyword];
NSLog(@"Appel de : %@", fullUrl);
NSURL *URLFormatted = [NSURL URLWithString:fullUrl];
NSLog(@"Appel de : %@", URLFormatted);
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:fullUrl]];
NSLog(@"Appel de : %@", request);
[request setHTTPShouldHandleCookies:NO];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue currentQueue] completionHandler:
^(NSURLResponse * response, NSData * data, NSError * error)
{
NSHTTPURLResponse * httpResponse = (NSHTTPURLResponse*)response;
NSLog(@"status code : %d", httpResponse.statusCode);
if(httpResponse.statusCode == 200) {
NSDictionary *jsonData = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
produits = [[WebservicesService getInstance]ExtractListProduct:jsonData];
NSLog(@"Il y a %d résultats pour la recherche", produits.count);
}
success(produits);
}];
}
这是我的日志显示:
2014-01-03 17:03:51.852 mcommerce_ipad[8649:a0b] Appel de : http://domain-name.com/rest/product-display.json?filter[title]=%test%&filter_op[title]=LIKE
2014-01-03 17:03:51.852 mcommerce_ipad[8649:a0b] Appel de : (null)
2014-01-03 17:03:51.853 mcommerce_ipad[8649:a0b] Appel de : <NSMutableURLRequest: 0x8a3c9c0> { URL: (null) }
2014-01-03 17:03:51.895 mcommerce_ipad[8649:a0b] status code : 0
当我直接尝试我的NSString时,最后是什么firebug返回。
200 OK
17 Object { vid="17", uid="0", title="Ethylotest chimique à usage unique", more...}
139 Object { vid="139", uid="16", title="Produit de test", more...}
142 Object { vid="142", uid="16", title="Test surface", more...}
这表明请求是正确的,应该返回一些东西,问题来自从NSString到NSURL的转换,但我找不到它......所以请成为我的救星!
答案 0 :(得分:1)
在将字符串转换为URL之前,您需要对字符串的参数部分进行URL编码。它在浏览器中工作,因为浏览器会在发送请求之前为您执行此操作。
具体来说,您需要修改%
符号。
答案 1 :(得分:1)
正如我在评论中所说,你需要转义特殊字符,否则URLWithString将返回null。
为此,请使用:
[NSURL URLWithString:[fullUrl stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]];