NSURLConnection/Сеанс. ПОЛУЧИТЬ запрос. отправка параметров в виде данных, а не части URL

Я знаком с запросом GET только из ручного построения строки параметров с URL-адресом. Администратор API сказал мне, что они не настроены для анализа моих параметров и что я должен отправить массив параметров JSON. В данном случае это параметр телефонных номеров.

Я знаком с отправкой данных в запрос POST через:

NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request fromData:data    completionHandler:^(NSData *data,NSURLResponse *response,NSError *error

Но мне это не кажется вариантом для методов GET.

Спасибо!


person yamski    schedule 01.01.2015    source источник
comment
В чем вопрос? Если вам нужно отправить данные, которые вы используете POST, вы не можете отправлять данные с помощью GET. Примечание. Хотя можно отправлять данные в команде GET с помощью curl, это не разрешено спецификациями GET и является артефактом curl, позволяющим делать то, что не должно.   -  person zaph    schedule 01.01.2015
comment
@Zaph Согласно соответствующему RFC 7231 явно не запрещено отправлять тело с запросом GET. Его семантика просто не определена, и сервер может отклонить запрос. Таким образом, это на самом деле поведение, определяемое реализацией, определяемое сервером.   -  person CouchDeveloper    schedule 01.01.2015
comment
@CouchDeveloper NSURLConnection не поддерживает отправку данных в запросе GET. В него можно добавить данные, но они не будут отправлены.   -  person zaph    schedule 01.01.2015
comment
@Zaph Я бы сказал, что это ошибка.   -  person CouchDeveloper    schedule 01.01.2015
comment
Из RFC 7231: полезная нагрузка в сообщении запроса GET не имеет определенной семантики;   -  person zaph    schedule 02.01.2015


Ответы (1)


Для URI компонент запроса (см. раздел 3.4 RFC 3986) — это дополнительные «неиерархические» данные, указывающие на ресурс, на который ссылается компонент иерархического пути.

Часто компонент запроса представляет собой список пар ключ/значение, разделенных запятыми. Но в этом нет необходимости. Семантика этой «строки» может быть определена сервером. Это также может быть определенный JSON.

Возможно, именно об этом и говорит админ API.

Если это так, вы можете отправить JSON в качестве компонента запроса. Убедитесь, что строка JSON правильно закодирована, а затем добавлена ​​к URI после добавления разделителя ?.

Вы также можете использовать NSURLComponents для составления этого URI:

Предположим, ваш «запрос» представляет собой некий пользовательский JSON, который должен содержать предложение SQL where:

NSURLComponents* components = [NSURLComponents componentsWithString:@"http://example.com"];
NSString* query = @"{\"where\":\"name='value1' OR name='value2'\"}";        
components.query = query;

В этом примере будет создан URI, закодированный компонент запроса которого будет выглядеть следующим образом:

%7B%22where%22:%22name='value1'%20OR%20name='value2'%22%7D

person CouchDeveloper    schedule 01.01.2015