gpt4 book ai didi

iphone - iPhone 上的 REST API 问题

转载 作者:行者123 更新时间:2023-11-29 05:01:09 25 4
gpt4 key购买 nike

我正在开发一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com