iPhone上的RESTAPI存在问题

iPhone上的RESTAPI存在问题,iphone,ios,nsurlconnection,nsurl,nsurlrequest,Iphone,Ios,Nsurlconnection,Nsurl,Nsurlrequest,我正在开发一个iPhone应用程序,它将使用RESTfulAPI与web服务交互。我使用NSURLConnection来做这项工作。直到今天,网络代码对我的所有需求都非常有效 例如,URL(排除站点)如下所示: /Listing/SearchAd?page=1&sortBy=DateDesc&q=BMW&id_category=3016&psize=20 如果“q”参数(本例中为BMW)少于3个字符,或者完全删除q参数,我的应用程序可以返回正确的数据。但是如果q

我正在开发一个iPhone应用程序,它将使用RESTfulAPI与web服务交互。我使用NSURLConnection来做这项工作。直到今天,网络代码对我的所有需求都非常有效

例如,URL(排除站点)如下所示:

/Listing/SearchAd?page=1&sortBy=DateDesc&q=BMW&id_category=3016&psize=20
如果“q”参数(本例中为BMW)少于3个字符,或者完全删除q参数,我的应用程序可以返回正确的数据。但是如果q超过3个字符,它只能返回一个包含空数据的合法json结构

但最奇怪的是,如果我使用另一个测试应用程序(REST,一个用于测试REST服务的mac应用程序)来测试同一个URL,它可以返回所有正确的数据。所以这不应该是服务的问题

我的应用程序中的一些代码:

NSURL *url = [[NSURL alloc] initWithString:[urlStr stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]];
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
NSURLConnection *con = [NSURLConnection connectionWithRequest:req delegate:self];
if (con) {
    NSMutableData *data = [[NSMutableData alloc] init];
    self.responseData = data;
    [data release];
} else {
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}
我使用netcat并得到以下结果: (令牌字段用于web服务的身份验证)

使用以下命令的请求:

GET /Listing/SearchAd?page=1&sortBy=DateDesc&q=BMW&id_category=3016&psize=20 HTTP/1.1
Host: localhost:2000
User-Agent: Rested/1.3 CFNetwork/520.0.13 Darwin/11.0.0 (x86_64) (MacBookPro7%2C1)
Accept: */*
Token: {E53D7DED-510A-414D-824D-3433077CF064}
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
Connection: keep-alive
使用我的应用程序的请求:

GET /Listing/SearchAd?page=1&sortBy=DateDesc&q=BMW&id_category=3016&psize=20 HTTP/1.1
Host: localhost:2000
User-Agent: Pazar/1.0 CFNetwork/485.13.9 Darwin/11.0.0
Token: {E53D7DED-510A-414D-824D-3433077CF064}
Accept: */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: keep-alive
我的应用程序为请求获取的原始数据只有37字节长。使用SBJsonParser进行转换后,它只是根级别的字典,数据字段为空

那么可能有什么问题?

一些调试提示:

使用
netcat-l-p2000
并使用
http://localhost:2000/
作为捕获原始请求的端点。使用Rested捕获请求,并比较两者

另外,记录您的原始响应以查看其中的真实内容。也许您的JSON转换有问题

编辑

因为请求看起来是相同的,所以让我们更进一步:一个日志代理。下面是我最喜欢的netcat代理,它将localhost:3000转发到localhost:2000,并将日志转发到infile和outfile。根据需要进行修改,然后使用Rested和您的应用程序再次测试,以查看真正恢复的内容:

mkfifo proxypipe
cat proxypipe | nc -l -p 3000 | tee -a inflow | nc localhost 2000 | tee -a outflow 1>proxypipe

你看过stringByAddingPercentEscapes调用后的url了吗?当我出现这种类型的错误时,通常是通过对字典进行JSON解析。您是否转储了原始响应以验证它是否真的为空?谢谢您的提示,我使用netcat进行了测试,请求是相同的。我转储了原始数据,它只有37个字节,转换成json后,它只是根级别的字典,数据字段为空。