iphone - iPhone 上的 REST API 问题

标签 iphone ios nsurlconnection nsurl nsurlrequest

我正在开发一个 iPhone 应用程序,它将使用 RESTful API 与 Web 服务交互。我使用 NSURLConnection 来完成这项工作。直到今天,网络代码都能很好地满足我的所有需求。

例如,URL(不包括网站)是这样的:

/Listing/SearchAd?page=1&sortBy=DateDesc&q=BMW&id_category=3016&psize=20

如果“q”参数(本例中为 BMW)少于 3 个字符,或者完全删除 q 参数,我的应用程序可以取回正确的数据。但是如果q超过3个字符,它只能返回一个合法的带有空数据的json结构。

但最奇怪的是,如果我使用另一个测试应用程序(Rested,一个用于测试 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并得到以下结果: (Token字段用于Web服务的认证)

使用 Rested 的请求:

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 -p 2000 并使用 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

关于iphone - iPhone 上的 REST API 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6928482/

相关文章:

iphone - 使用 wifi 在 iPhone 和其他手机之间共享文本

ios - 无法使用 cocoapods 安装 opencv,无法解析主机 : hivelocity. dl.sourceforge.net

ios - 初学者 xcode swift sprite 套件 - 按名称删除 sprite 崩溃

ios - 如何使用swift将Json作为参数发送到url中

ios - iOS 9 上的 NSURLConnection 不使用 HTTP/2 协议(protocol)

iphone - iOS 在命令 Quartz 2D CGContext 上绘图

iphone - ASIHTTP - 离开 View 并获取 EXC_BAD_ACCESS

ios - 在 ios 7 中发布相关的横向 View ?

ios - 如果设置 io.flutter.embedded_views_preview 为 true,则无法正常运行 flutter 项目

ios - 在后台执行网络和其他耗时的任务