Я работаю над приложением для iPhone, которое будет взаимодействовать с веб-сервисом с помощью RESTful API. Я использую NSURLConnection, чтобы сделать работу. Код сети работал очень хорошо для всех моих потребностей до сегодняшнего дня.
Например, URL-адрес (исключая сайт) выглядит следующим образом:
/Listing/SearchAd?page=1&sortBy=DateDesc&q=BMW&id_category=3016&psize=20
Если параметр «q» (в данном примере BMW) меньше 3 символов или полностью удаляет параметр q, мое приложение может вернуть правильные данные. Но если q имеет более 3 символов, он может вернуть только легальную структуру json с пустыми данными.
Но самое странное, что если я использую другое приложение для тестирования (Rested, приложение для Mac для тестирования служб REST) для проверки того же 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 используется для аутентификации для веб-службы)
Запрос с использованием 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 это только словарь корневого уровня с пустым полем данных.
Что тогда может быть не так?